Como posso mover minha chave de implantação para vagrant?

9

Eu gostaria de passar uma chave ssh para vagrant e colocá-las ~/.ssh, qual é a maneira mais fácil de fazer isso? Eu tenho o seguinte no meu arquivo 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 vagrant vagrant 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"

total 4 -rw ------- 1 ubuntu ubuntu 0 22 de março 08:56 autorizado_keys -rw-r - r-- 1 raiz raiz 1670 26 de março 08:59 id_rsa

mas quando vagrant ssh -c "ls -l ~/.ssh"eu recebo:

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

Tão vagabundo está substituindo meu .sshdiretório.

Kit Sunde
fonte

Respostas:

13

Coloquei meu arquivo SSH conf.d/.ssh/id_rsa.medipope fiz:

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"

O que funcionou esplendidamente quando percebi que o usuário vagabundo vagrantnão é ubuntu(e foi por isso que fiquei confuso na minha pergunta sobre por que minha chave ssh parecia desaparecer).

Kit Sunde
fonte
Este é o caminho no Windows, onde o encaminhamento de agente não funciona.
Markus
funciona mas obtém este erro, ==> default: stdin: também não é um tty que as permissões mudam e tiveram que ser redefinidas, rodando com o sudo off fix?
radtek
12

E o encaminhamento do agente SSH?

Certifique-se de que sua chave SSH funcione localmente primeiro e depois adicione config.ssh.forward_agent = trueà sua Vagrantfilepara passar.

Detalhes do Vagrant aqui: http://docs.vagrantup.com/v2/vagrantfile/ssh_settings.html

rjocoleman
fonte
Estou cansado de fazer isso, já que estou planejando distribuir a caixa vagrante aos nossos designers que provavelmente me pareceriam engraçados se eu começasse a me referir aos chaveiros como coisas de computador. :) Obrigado!
Kit Sunde
Nesse caso, eu construiria minha própria caixa com o VeeWee e a distribuiria como um pacote, incluindo config.ssh.private_key_pathou faria algo terrível como ter a chave ssh na pasta do projeto com o Vagrantfile. Ele deve ser distribuído de alguma forma no caso de uso, então escolha seu mal!
rjocoleman
1
Esta é praticamente a mesma pergunta: superuser.com/a/570775/210384
rjocoleman
5

Você pode usar o módulo File principal do Ruby, assim:

  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

Estou realmente surpreso que o Vagrant não forneça isso por padrão!

Miau
fonte
Eu recomendaria também adicionar aspas em torno dos echoargumentos: echo "#{ssh_pub_key}" >> /home/vagrant/.ssh/authorized_keyse echo "#{ssh_pub_key}" >> /root/.ssh/authorized_keys. Isso também funcionará se uma chave SSH pública contiver caracteres especiais (por exemplo ().
tjanez
1

Dê uma olhada no Vagrant Shell Provisioner , você adicionaria isso ao seu Vagrantfile.

No entanto, dependendo do que você está tentando alcançar, provavelmente é melhor usar a chave ssh fornecida para acessar o Vagrant.

Para gerar um arquivo de configuração rápido a ser adicionado ao seu ~/.ssh/config, incluindo uma linha de arquivo de identidade executada $ vagrant ssh-config. Você poderia então, em $ ssh you-vagrant-boxvez de $ vagrant ssh.

rjocoleman
fonte
1
Ah, isso não é para SSH na minha caixa, é para dar acesso vagante aos meus repositórios git. Então eu preciso mover um arquivo do meu host para ~ / .ssh /
Kit Sunde 26/13
1
Isso é mais claro! Na sua edição acima, você tem certeza ~/e /home/ubuntué o mesmo local? O homedir padrão do Vagrant é /home/vagrant.
rjocoleman
Não esqueça que o seu Vagrantfile é totalmente interpretado como ruby, portanto, você pode fazer algo como: 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" Você pode ter problemas de permissão ao ler a chave ssh.
rjocoleman
1
Consegui copiar o arquivo ~/.sshusando uma pasta sincronizada e cp, mas parece que o vagrant o substitui posteriormente.
Kit Sunde
0

Para mover chaves privadas e públicas, o seguinte funcionará:

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
fonte