Como usar o encaminhamento de agente ssh com “vagrant ssh”?

107

Em vez de criar um novo par de chaves SSH em uma caixa vagrant, gostaria de reutilizar o par de chaves que tenho em minha máquina host, usando o encaminhamento de agente . Tentei definir config.ssh.forward_agent como TRUE no Vagrantfile, reiniciei a VM e tentei usar:

vagrant ssh -- -A

... mas ainda recebo uma solicitação de senha quando tento fazer uma verificação do git. Alguma ideia do que estou perdendo?

Matt V.
fonte
se você não tiver suas chaves ssh corretamente, git não deve pedir uma senha, mas dizer que você negou as permissões. Acho que uma senha está sendo solicitada porque você está clonando https em vez de [email protected] (ssh). meus 2 centavos.
alexserver

Respostas:

89

Estou usando o vagrant 2 no OS X Mountain Lion.

Vagrant.configure("2") do |config|
  config.ssh.private_key_path = "~/.ssh/id_rsa"
  config.ssh.forward_agent = true
end
  1. config.ssh.private_key_path é a sua chave privada local
  2. Sua chave privada deve estar disponível para o agente ssh local. Você pode verificar com ssh-add -L, se não estiver listado, adicione-o comssh-add ~/.ssh/id_rsa
  3. Não se esqueça de adicionar sua chave pública ao ~/.ssh/authorized_keysVagrant VM. Você pode copiar e colar ou usar uma ferramenta como ssh-copy-id
LuizSignorelli
fonte
8
Percebi que depois de configurar acima, posso usar o usuário "vagrant" para "clonar git", mas não posso usar o usuário "root" para "clonar git". Você sabe qual parece ser o problema? Obrigado
Nam Nguyen de
7
config.ssh.private_key_path = "~/.ssh/id_rsa"faz o Vagrant aguentar Waiting for VM to boot.
apennebaker
14
Você também precisa manter a chave do vagrant insercureconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin
3
No OS X, descobri que adicionar as chaves privadas ao chaveiro do OS X ssh-add -Kfuncionou (e também config.ssh.forward_agent = true). Ver esta resposta
Flimm
2
Recebi o mesmo erro de @apennebaker. e seguir as etapas que Calin sugeriu não ajudou ... O que funcionou para mim foi adicionar chaves ao keychain do meu sistema operacional host e desativar a atribuição de config.ssh.private_key_path.
alexserver
80

Adicione ao Vagrantfile

Vagrant::Config.run do |config|
   # stuff
   config.ssh.forward_agent = true
end

Veja a documentação

EnabrenTane
fonte
11
Certifique-se de adicionar ssh no host subjacente e que a chave seja descriptografada.
EnabrenTane
1
Observe que o Windows não inicia automaticamente o agente ssh, que você precisa ter em execução para encaminhar suas chaves ssh. Siga este guia para configurar a inicialização automática do ssh-agent no Windows.
nebffa
62
Esta resposta provavelmente não merece tantos votos. O OP declara claramente que eles adicionaram config.ssh.forward_agentao arquivo de configuração, então quais novas informações esta resposta está fornecendo? Até mesmo o link já está em questão.
Trindaz
7
@Trindaz você está certo. Não consigo explicar por que essa é uma das minhas respostas mais populares. No entanto, isso aparentemente ajudou pelo menos 52 pessoas, então devo considerar isso uma vitória.
EnabrenTane
1
Essa resposta de fato não traz nenhuma informação nova, mas por outro lado é tudo que precisa ser configurado para uma máquina provisionada pelo Vagrant. Pelo menos desde que você tenha o encaminhamento do agente configurado corretamente na máquina conectada (ou seja, o encaminhamento funciona para outras máquinas não vagas).
techraf
20

Além de adicionar "config.ssh.forward_agent = true" ao arquivo vagrant, certifique-se de que o computador host esteja configurado para encaminhamento de agente. O Github fornece um bom guia para isso. (Confira a seção de solução de problemas).

HipsterHobo
fonte
7

Tive que trabalhar com as respostas acima em 1.4.3, mas parei de funcionar em 1.5. Agora tenho que correr ssh-addpara funcionar totalmente com 1.5.

Por enquanto, adiciono a seguinte linha ao meu script de provisionamento ansible. - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

Também criei um resumo da minha configuração: https://gist.github.com/KyleJamesWalker/9538912

Kyle James Walker
fonte
Sempre tive que usar ssh-add com 1.4 e 1.5, caso contrário, não havia nenhum agente em execução para ser encaminhado
iheggie
5

Se você estiver no Windows, o SSH Forwarding no Vagrant não funciona corretamente por padrão (devido a um bug no net-ssh). Veja este relatório de bug específico do Vagrant: https://github.com/mitchellh/vagrant/issues/1735

No entanto, existe uma solução alternativa! Simplesmente copie automaticamente sua chave SSH local para o Vagrant VM por meio de um script de provisionamento simples em seu VagrantFile. Aqui está um exemplo: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783

Tim Donohue
fonte
2

Quando recentemente testamos o vagrant-awsplugin com o Vagrant 1.1.5, encontramos um problema com o encaminhamento do agente SSH. Descobriu-se que o Vagrant estava forçando, IdentitiesOnly=yessem opção, alterá-lo para no. Isso forçou o Vagrant a olhar apenas para a chave privada listada no Vagrantfilepara o provedor AWS.

Escrevi nossas experiências em um blog . Isso pode se transformar em uma solicitação de pull em algum ponto.

Benjamin Oakes
fonte
2
Existe uma maneira de automatizar a cópia da chave pública subjacente na máquina host para a VM Vagrant na criação com Vagrant up? Agora eu tenho que criar a máquina, fazer login manualmente e adicionar minha chave pública a /home/vagrant/.ssh/authorized_keys
Noah
1

Certifique-se de que a VM não inicie seu próprio agente SSH. Eu tinha essa linha no meu~/.profile

eval `ssh-agent`

Após removê-lo, o encaminhamento do agente SSH funcionou.

Fabian Schmengler
fonte
0

O verdadeiro problema é o Vagrant usando 127.0.0.1:2222 como encaminhamento de porta padrão. Você pode adicionar um (não 2222, 2222 já está ocupado por padrão)

config.vm.network "forwarded_port", convidado: 22, host: 2333, host_ip: "0.0.0.0"

"0.0.0.0" é uma forma de aceitar a solicitação de uma conexão externa. então ssh -p 2333 [email protected] (mude para seu próprio endereço IP de host, dud) funcionará bem. Me agradeça, apenas me chame de Leifeng!

Leifeng
fonte
0

No Windows, o problema é que o Vagrant não sabe como se comunicar com o agente ssh do git-bash. No entanto, ele sabe como usar o Pageant do PuTTY. Portanto, contanto que o Pageant esteja em execução e tenha carregado sua chave SSH, e contanto que você tenha definido config.ssh.forward_agent, isso deve funcionar.

Veja este comentário para detalhes.

Se você usar o Pageant, a solução alternativa de atualizar o Vagrantfile para copiar as chaves SSH no Windows não é mais necessária.

Josh Kelley
fonte