Come posso spostare la mia chiave deploy in vagrant?


9

Vorrei spostare una chiave ssh in un vagabondo e inserirli ~/.ssh, qual è il modo più semplice per farlo? Ho il seguente nel mio file Vagrant:

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

totale 4 -rw-r - r-- 1 vagabondo vagabondo 1670 mar 26 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"

totale 4 -rw ------- 1 ubuntu ubuntu 0 22 mar 08:56 authorized_keys -rw-r - r-- 1 root root 1670 mar 26 08:59 id_rsa

ma poi quando lo faccio vagrant ssh -c "ls -l ~/.ssh"ottengo:

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

Quindi il vagabondo sta sovrascrivendo la mia .sshdirectory.

Risposte:


13

Ho inserito il mio file SSH conf.d/.ssh/id_rsa.medipope poi ho fatto:

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"

Il che ha funzionato magnificamente quando mi sono reso conto che l'utente vagabondo vagrantnon lo è ubuntu(motivo per cui ero confuso nella mia domanda sul perché la mia chiave ssh sembrava scomparire).


Questo è il modo in Windows, dove l'inoltro dell'agente non funziona.
markus,

funziona ma ottieni questo errore, ==> default: stdin: non è un tty anche i permessi cambiano e dovevano essere resettati, funzionerà con sudo off fix?
Radtek,

12

Che dire dell'inoltro dell'agente SSH?

Assicurati prima che la tua chiave SSH funzioni localmente, quindi aggiungi config.ssh.forward_agent = trueal tuo Vagrantfileper passare.

Dettagli vagabondi qui: http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html


Sono stanco di farlo dal momento che ho intenzione di distribuire la scatola vagabonda ai nostri designer che probabilmente mi guarderebbero divertenti se iniziassi a riferirmi ai portachiavi come cose del computer. :) Grazie comunque!
Kit Sunde,

In quel caso o costruivo la mia scatola con VeeWee e la distribuivo come pacchetto includendo config.ssh.private_key_patho facevo qualcosa di terribile come avere la chiave ssh nella cartella del progetto con il Vagrantfile. Deve essere distribuito in qualche modo nel caso d'uso, quindi scegli il tuo male!
rjocoleman,

1
Questa è praticamente la stessa domanda: superuser.com/a/570775/210384
rjocoleman

5

Puoi usare il modulo File principale di Ruby, in questo modo:

  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

Sono davvero sorpreso che Vagrant non lo fornisca per impostazione predefinita!


Consiglierei di aggiungere anche virgolette sugli echoargomenti: echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keyse echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Funzionerà anche se una chiave SSH pubblica contiene caratteri speciali (ad es (.).
Tjanez,

1

Dai un'occhiata al Vagrant Shell Provisioner , lo aggiungeresti al tuo Vagrantfile.

Tuttavia, a seconda di ciò che stai cercando di ottenere, è probabilmente meglio usare la chiave ssh fornita per accedere a Vagrant.

Per generare un file di configurazione rapida da aggiungere al tuo ~/.ssh/config, inclusa una linea di file di identità eseguita $ vagrant ssh-config. Potresti quindi $ ssh you-vagrant-boxpiuttosto che $ vagrant ssh.


1
Ah, questo non è per SSH nella mia scatola, questo per dare un accesso vagabondo al mio repository git. Quindi devo spostare un file dal mio host in ~ / .ssh /
Kit Sunde il

1
Questo è più chiaro! Nella modifica di cui sopra sei sicuro che ~/e si /home/ubuntutrovano nella stessa posizione? L'omedir predefinito di Vagrant è /home/vagrant.
rjocoleman,

Non dimenticare che il tuo Vagrantfile è completamente interpretato in ruby, quindi potresti fare qualcosa del genere: 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" potresti imbatterti in problemi di permessi leggendo il tasto ssh.
rjocoleman,

1
Sono riuscito a copiare il file ~/.sshutilizzando una cartella sincronizzata e cp, ma sembra che il vagabondo lo sovrascriva in seguito.
Kit Sunde,

0

Per spostare sia le chiavi private che quelle pubbliche, funzionerà quanto segue:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.