¿Cómo puedo mover mi clave de implementación a vagabundo?

9

Me gustaría mover una clave ssh a vagabundo y ponerlas ~/.ssh, ¿cuál es la forma más fácil de hacerlo? Tengo lo siguiente en mi archivo 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 vagabundo vagabundo 1670 26 de marzo 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 22 de marzo 08:56 claves_autorizadas -rw-r - r-- 1 raíz raíz 1670 26 de marzo 08:59 id_rsa

pero cuando lo hago vagrant ssh -c "ls -l ~/.ssh"me sale:

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

Así que vagabundo está sobrescribiendo mi .sshdirectorio.

Kit Sunde
fuente

Respuestas:

13

Puse mi archivo SSH conf.d/.ssh/id_rsa.medipopy luego hice:

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"

Lo que funcionó espléndidamente una vez que me di cuenta de que el usuario vagabundo vagrantno ubuntulo es (es por eso que estaba confundido en mi pregunta de por qué mi clave ssh parecía desaparecer).

Kit Sunde
fuente
Este es el camino en Windows, donde el reenvío de agentes no funciona.
markus
funciona pero recibe este error, ==> predeterminado: stdin: no es un tty también los permisos cambian y tuvieron que restablecerse, ¿se ejecutará con sudo desactivado?
radtek
12

¿Qué pasa con el reenvío de agentes SSH?

Asegúrese de que su clave SSH funcione localmente primero y luego agréguela config.ssh.forward_agent = truea su Vagrantfilepaso.

Detalles vagos aquí: http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html

rjocoleman
fuente
Estoy cansado de hacerlo, ya que planeo distribuir la caja vagabunda a nuestros diseñadores, quienes probablemente me mirarían divertido si comenzara a referirme a los llaveros como cosas de computadora. :) Sin embargo, gracias!
Kit Sunde
En ese caso, construiría mi propia caja con VeeWee y la distribuiría como un paquete que incluyera config.ssh.private_key_patho haría algo terrible como tener la clave ssh en la carpeta del proyecto con el archivo Vagrantfile. Debe distribuirse de alguna manera en el caso de uso, ¡así que elige tu maldad!
rjocoleman
1
Esto es más o menos la misma pregunta: superuser.com/a/570775/210384
rjocoleman
5

Puede usar el módulo de archivo principal de Ruby, así:

  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

¡Estoy realmente sorprendido de que Vagrant no proporcione esto por defecto!

maullar
fuente
También recomendaría agregar citas alrededor de echoargumentos: echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keysy echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Esto también funcionará si una clave SSH pública contiene caracteres especiales (por ejemplo ().
tjanez
1

Eche un vistazo al Vagrant Shell Provisioner , agregaría esto a su Vagrantfile.

Sin embargo, dependiendo de lo que intente lograr, probablemente sea mejor usar la clave ssh suministrada para acceder a Vagrant.

Para generar un archivo de configuración rápida que se agregará a su ~/.ssh/config, incluida una línea de archivo de identidad ejecutada $ vagrant ssh-config. Entonces podrías $ ssh you-vagrant-boxmás que $ vagrant ssh.

rjocoleman
fuente
1
Ah, esto no es para SSH'ing en mi caja, es para dar acceso vagabundo a mis repositorios git. Así que necesito mover un archivo de mi host a ~ / .ssh /
Kit Sunde el
1
Eso está más claro! En su edición anterior, ¿está seguro ~/y /home/ubuntutiene la misma ubicación? El homedir predeterminado del vagabundo es /home/vagrant.
rjocoleman
No olvide que su Vagrantfile es completamente interpretado en ruby, por lo que podría hacer algo como: Sin 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" embargo, puede tener problemas de permisos al leer la clave ssh.
rjocoleman
1
Logré copiar el archivo ~/.sshusando una carpeta sincronizada y cp, pero parece que vagabundo lo sobrescribe después.
Kit Sunde
0

Para mover las claves privadas y públicas, funcionará lo siguiente:

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
fuente