Comment puis-je déplacer ma clé de déploiement dans vagabond?

9

Je voudrais déplacer une clé ssh dans vagrant et les insérer ~/.ssh, quelle est la façon la plus simple de le faire? J'ai les éléments suivants dans mon dossier Vagrant:

config.vm.synced_folder "conf.d", "/svr/conf.d"
config.vm.provision :shell, 
:inline => "ls -l /svr/conf.d/.ssh"

total 4 -rw-r - r-- 1 vagabond vagabond 1670 26 mars 08:19 id_rsa.mediapop

config.vm.provision :shell, 
:inline => "cp /svr/conf.d/.ssh/id_rsa.mediapop /home/ubuntu/.ssh/id_rsa"
config.vm.provision :shell, 
:inline => "ls -l /home/ubuntu/.ssh"

total 4 -rw ------- 1 ubuntu ubuntu 0 mars 22 08:56 authorized_keys -rw-r - r-- 1 racine root 1670 26 mars 08:59 id_rsa

mais quand je le fais, vagrant ssh -c "ls -l ~/.ssh"je reçois:

$ vagrant ssh -c "ls -l ~/.ssh"
total 4
-rw-r--r-- 1 vagrant vagrant 409 Mar 20 04:47 authorized_keys

Alors vagabond écrase mon .sshannuaire.

Kit Sunde
la source

Réponses:

13

J'ai mis mon fichier SSH conf.d/.ssh/id_rsa.medipoppuis j'ai fait:

config.vm.synced_folder "conf.d", "/svr/conf.d"
config.vm.provision :shell, 
:inline => "cp /svr/conf.d/.ssh/id_rsa.mediapop /home/vagrant/.ssh/id_rsa"

Ce qui a fonctionné à merveille une fois que j'ai réalisé que l'utilisateur vagabond ne l'est vagrantpas ubuntu(c'est pourquoi j'ai été confus dans ma question quant à la raison pour laquelle ma clé ssh semblait disparaître).

Kit Sunde
la source
C'est la voie sous Windows, où le transfert d'agent ne fonctionne pas.
Markus
fonctionne mais obtient cette erreur, ==> par défaut: stdin: n'est pas un tty aussi les autorisations changent et ont dû être réinitialisées, fonctionnera avec sudo off fix?
radtek
12

Qu'en est-il du transfert d'agent SSH?

Assurez-vous d'abord que votre clé SSH fonctionne localement, puis ajoutez-la config.ssh.forward_agent = trueà votre Vagrantfilepassage.

Détails Vagrant ici: http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html

rjocoleman
la source
Je suis fatigué de le faire car je prévois de distribuer la boîte vagabonde à nos concepteurs qui me regarderaient probablement drôle si je commençais à faire référence aux porte-clés comme des choses informatiques. :) Merci quand même!
Kit Sunde
Dans ce cas, je construisais ma propre boîte avec VeeWee et je la distribuais en tant que package, config.ssh.private_key_pathou je faisais quelque chose de terrible comme avoir la clé ssh dans le dossier du projet avec le Vagrantfile. Cela doit être distribué d'une manière ou d'une autre dans le cas d'utilisation, alors choisissez votre mal!
rjocoleman
1
C'est à peu près la même question: superuser.com/a/570775/210384
rjocoleman
5

Vous pouvez utiliser le module File de Ruby, comme ceci:

  config.vm.provision "shell" do |s|
    ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
    s.inline = <<-SHELL
      echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
      echo #{ssh_pub_key} >> /root/.ssh/authorized_keys
    SHELL
  end

Je suis vraiment surpris que Vagrant ne fournisse pas cela par défaut!

Miaou
la source
Je recommanderais également d'ajouter des citations autour des echoarguments: echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keyset echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Cela fonctionnera également si une clé SSH publique contient des caractères spéciaux (par exemple ().
tjanez
1

Jetez un œil au Vagrant Shell Provisioner , vous l'ajouteriez à votre Vagrantfile.

Cependant, selon ce que vous essayez de réaliser, il est probablement préférable d'utiliser la clé ssh fournie pour accéder à Vagrant.

Pour générer un fichier de configuration rapide à ajouter à votre ~/.ssh/config, y compris une ligne de fichier d'identité exécutée $ vagrant ssh-config. Vous pourriez alors $ ssh you-vagrant-boxplutôt que $ vagrant ssh.

rjocoleman
la source
1
Ah, ce n'est pas pour SSH dans ma boîte, c'est pour donner un accès vagabond à mes git repos. J'ai donc besoin de déplacer un fichier de mon hôte vers ~ / .ssh /
Kit Sunde
1
C'est plus clair! Dans votre modification ci-dessus, êtes-vous sûr de cela ~/et /home/ubuntuêtes-vous au même endroit? Le homedir par défaut de Vagrant est /home/vagrant.
rjocoleman
N'oubliez pas que votre Vagrantfile est entièrement interprété ruby, vous pouvez donc faire quelque chose comme: git_ssh_key = File.read('/svr/conf.d/.ssh/id_rsa.mediapop'); config.vm.provision :shell, :inline => "cat >>/home/vagrant/.ssh/id_rda.mediapop <<EOF #{git_ssh_key} EOF" Vous pouvez rencontrer des problèmes d'autorisations en lisant la clé ssh.
rjocoleman
1
J'ai réussi à copier le fichier dans ~/.sshun dossier synchronisé et cp, mais il semble que vagabond l'écrase ensuite.
Kit Sunde
0

Pour déplacer les clés privées et publiques, les éléments suivants fonctionneront:

config.vm.provision "shell" do |s|
  ssh_prv_key = File.read("#{Dir.home}/.ssh/id_rsa")
  ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
  s.inline = <<-SHELL
    echo Provisioning public ssh key...
    [ -e /home/vagrant/.ssh/id_rsa.pub ] && rm /home/vagrant/.ssh/id_rsa.pub
    touch /home/vagrant/.ssh/id_rsa.pub
    echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/id_rsa.pub

    echo Provisioning private ssh key...
    [ -e /home/vagrant/.ssh/id_rsa ] && rm /home/vagrant/.ssh/id_rsa
    touch /home/vagrant/.ssh/id_rsa
    echo "#{ssh_prv_key}" >> /home/vagrant/.ssh/id_rsa

    echo Provisioning of ssh keys completed [Success].
  SHELL
end
Ulad Kasach
la source