Wie kann ich meinen Bereitstellungsschlüssel in Vagrant verschieben?

9

Ich möchte einen SSH-Schlüssel in Vagabund verschieben und sie einfügen. ~/.sshWas ist der einfachste Weg, dies zu tun? Ich habe Folgendes in meiner Vagrant-Datei:

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

insgesamt 4 -rw-r - r-- 1 Vagabund Vagabund 1670 26. März 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"

gesamt 4 -rw ------- 1 ubuntu ubuntu 0 Mar 22 08:56 autorisierte_Tasten -rw-r - r-- 1 root root 1670 Mar 26 08:59 id_rsa

aber wenn ich es tue, vagrant ssh -c "ls -l ~/.ssh"bekomme ich:

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

Vagrant überschreibt also mein .sshVerzeichnis.

Kit Sunde
quelle

Antworten:

13

Ich legte meine SSH-Datei ein conf.d/.ssh/id_rsa.medipopund tat dann:

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"

Was hervorragend funktioniert hat, als ich merkte, dass der vagabundierende Benutzer es vagrantnicht ist ubuntu(weshalb ich in meiner Frage verwirrt war, warum mein SSH-Schlüssel zu verschwinden schien).

Kit Sunde
quelle
Dies ist der Weg unter Windows, wo die Agentenweiterleitung nicht funktioniert.
Markus
funktioniert aber erhalte diesen Fehler, ==> default: stdin: ist nicht ein tty auch die Berechtigungsänderung und musste zurückgesetzt werden, läuft mit sudo off fix?
Radtek
12

Was ist mit SSH Agent Forwarding?

Stellen Sie sicher, dass Ihr SSH-Schlüssel zuerst lokal funktioniert, und fügen config.ssh.forward_agent = trueSie ihn dann zu Ihrem VagrantfileDurchgang hinzu.

Vagrant Details hier: http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html

rjocoleman
quelle
Ich bin es leid, das zu tun, da ich vorhabe, die Vagabundkiste an unsere Designer zu verteilen, die mich wahrscheinlich komisch ansehen würden, wenn ich anfangen würde, Schlüsselanhänger als Computersachen zu bezeichnen. :) Trotzdem danke!
Kit Sunde
In diesem Fall würde ich entweder meine eigene Box mit VeeWee erstellen und sie als Paket verteilen, einschließlich config.ssh.private_key_pathoder etwas Schreckliches tun, wie den ssh-Schlüssel im Projektordner mit der Vagrant-Datei zu haben. Es muss irgendwie im Anwendungsfall verteilt werden, also such dir dein Übel aus!
Rjocoleman
1
Das ist so ziemlich die gleiche Frage: superuser.com/a/570775/210384
rjocoleman
5

Sie können Rubys Kernmodul "Datei" wie folgt verwenden:

  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

Ich bin wirklich überrascht, dass Vagrant dies nicht standardmäßig bereitstellt!

Miau
quelle
Ich würde empfehlen, auch Anführungszeichen um echoArgumente hinzuzufügen : echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keysund echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Dies funktioniert auch, wenn ein öffentlicher SSH-Schlüssel Sonderzeichen enthält (z (. B. ).
Tjanez
1

Schauen Sie sich den Vagrant Shell Provisioner an , den Sie Ihrem Vagrantfile hinzufügen würden.

Je nachdem, was Sie erreichen möchten, ist es wahrscheinlich besser, den mitgelieferten SSH-Schlüssel zu verwenden, um auf Vagrant zuzugreifen.

So generieren Sie eine schnelle Konfigurationsdatei, die zu Ihrer hinzugefügt werden soll ~/.ssh/config, einschließlich eines Ausführungslaufs für eine Identitätsdatei $ vagrant ssh-config. Sie könnten dann $ ssh you-vagrant-boxeher als $ vagrant ssh.

rjocoleman
quelle
1
Ah, das ist nicht für SSH'ing in meiner Box, das ist, um vagabundierenden Zugang zu meinen Git-Repos zu gewähren. Also muss ich eine Datei von meinem Host in ~ / .ssh /
Kit Sunde
1
Das ist klarer! In Ihrem bearbeiten oben sind Sie sicher , dass ~/und /home/ubuntusind der gleiche Ort? Vagrants Standard-Homedir ist /home/vagrant.
rjocoleman
Vergessen Sie nicht, dass Ihre Vagrant-Datei vollständig als Ruby interpretiert ist. 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" Sie können also Folgendes tun: Beim Lesen des SSH-Schlüssels können jedoch Berechtigungsprobleme auftreten.
Rjocoleman
1
Ich habe es geschafft, die Datei ~/.sshmit einem synchronisierten Ordner zu kopieren und cp, aber es scheint, als würde Vagrant sie danach überschreiben.
Kit Sunde
0

Um sowohl private als auch öffentliche Schlüssel zu verschieben, funktioniert Folgendes:

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
quelle