Não é possível fazer o SSH em uma máquina virtual Vagrant

11

Máquina local do Vagrant instalada no endereço IP 10.0.0.23com o nome do host lamp-vm.

Usando o vagrant sshcomando, posso conectar-me perfeitamente e fazer tudo o que preciso.

Isso cria um erro

$ ssh vagrant @ lamp-vm -v -v

debug1: conectar ao endereço 10.0.0.23 porta 22: tempo limite da conexão esgotado
ssh: conectar ao host lamp-vm porta 22: tempo limite da conexão esgotado

Meu /etc/hostsarquivo contém 10.0.0.23 lamp-vm.

Meu arquivo .ssh / config parece

Host lamp-vm
Usuário vagrant
IdentityFile ~ / .ssh / vagrant

Eu tentei o comando ssh com e sem o -i /path/to/.sh/identity_filetambém.

Como eu me conecto à minha Máquina Virtual Vagrant usando SSH?

csi
fonte

Respostas:

8

Também enfrentei esse problema e essa foi a minha configuração final que me permitiu ssh na minha máquina vagrant de qualquer lugar na minha máquina host.

Vagrantfile:

...
# Setting up private_network to have virtual host
config.vm.network :private_network, ip: "192.168.33.10"

# Enable ssh forward agent
config.ssh.forward_agent = true
...

ssh na máquina:

ssh [email protected]

Você será solicitado a fornecer a senha (o padrão é vago):

[email protected]'s password:

E bum, você está dentro!

PS * Você pode usar o scp também em qualquer lugar da sua máquina host:

scp /path/to/src/file [email protected]:/path/to/destination/file
shaoming
fonte
Enquanto isso funciona, é bastante frágil - descobri que nosso Vagrantfile causou algumas edições em / etc / network / interfaces na VM do VirtualBox, o que significava que minha conexão SSH cairia. Uma conexão localhost ( ssh -p 2222 vagrant@localhost) não será afetada por isso.
RichVel
8

É antigo, mas como não há resposta, fornecerei uma. Comando:

vagrant ssh

É o equivalente a

ssh vagrant@localhost -p 2222 -i .vagrant/machines/default/virtualbox/private_key

Esse é o comportamento padrão, se você alterou algo, altere o comando adequadamente. Antes de tudo, o Vagrant criará um usuário vagante na sua caixa de convidados, e você o usará para ssh. Como as pessoas anteriores disseram, ele encaminhará o tráfego da porta 2222 no seu host para a porta 22 no seu convidado, por padrão (quando você usa o vagrant up, vê a mensagem sendo exibida). E, por último, o Vagrant cria chaves para a sessão ssh, assim você não precisa, então você precisa fornecer a chave pública como argumento ao conectar via ssh.

stefwhite
fonte
Esta é a resposta real e correta! Funciona sem problemas, com mobaxterm, por exemplo. Você precisa também de especificar o caminho completo para private_key
sineverba
6

Esse comportamento é por design.

O Vagrant usa o modo NAT do VirtualBox, o que significa usar o encaminhamento de porta.

Você não pode fazer o SSH diretamente na sua VM usando o modo NAT.

Usar 'vagrant ssh' significa que o vagrant fará o encaminhamento da porta para você, para que você não precise se preocupar com isso. Eu acho que ele se conectará ao localhost na porta 2222 por padrão, mas tentará também resolver qualquer colisão de número de porta.

Se você precisar fazer o SSH diretamente na sua VM, alterne a VM para o modo de rede somente host ou em ponte.

Philip Wigg
fonte
Obrigado Philip, mas como eu resolveria isso? Desculpe pela inexperiência.
CSI
1
Estou usando o modo somente host e o problema persiste.
CSI
Deve ser a resposta aceita. Muito útil para entender isso - acessar o host local na porta 2222 foi o caminho para uma instalação do Vagrant em funcionamento (por algum motivo, ainda não consegui que a chave insecure_private_key funcionasse.) Achei que a 'chave privada insegura' padrão não trabalho, então acabei especificando uma chave privada e um nome de usuário diferentes no arquivo Vagrant, mas a parte da porta 2222 do host local não precisava ser alterada.
RichVel
3

Windows / Vagrant / Ubuntu

Isso é o que funcionou para mim e você pode descobrir rapidamente se isso funcionará executando isso no cliente ssh.

ssh [email protected] -p 2222 -v

O -v o colocará no modo detalhado e exibirá informações de depuração ...

$ ssh [email protected] -p 2222 -v
OpenSSH_7.1p1, OpenSSL 1.0.2e 3 de dezembro de 2015
debug1: Conectando-se à porta
12722.0.0.1 [127.0.0.1] 2222. debug1: Conexão estabelecida.
debug1: arquivo de identidade /home/Jamie/.ssh/id_rsa tipo 1
debug1: key_load_public: Não existe esse arquivo ou diretório
debug1: arquivo de identidade /home/Jamie/.ssh/id_rsa-cert tipo -1
debug1: key_load_public: nenhum arquivo ou diretório diretório
debug1: arquivo de identidade /home/Jamie/.ssh/id_dsa tipo -1
debug1: key_load_public: Nenhum arquivo ou diretório
debug1: arquivo de identidade /home/Jamie/.ssh/id_dsa-cert tipo -1
debug1: key_load_public: arquivo ou diretório
debug1: arquivo de identidade /home/Jamie/.ssh/id_ecdsa tipo -1
debug1: key_load_public: Não existe esse arquivo ou diretório
debug1: arquivo de identidade /home/Jamie/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: não existe esse arquivo ou diretório
debug1: arquivo de identidade /home/Jamie/.ssh/id_ed25519 type -1
debug1: key_load_public: Não existe esse arquivo ou diretório
debug1: arquivo de identidade /home/Jamie/.ssh/id_ed25519-cert type -1
debug1: Ativando o modo de compatibilidade para o protocolo 2.0
debug1: cadeia de versão local SSH-2.0-OpenSSH_7.1
debug1 : Protocolo remoto versão 2.0, versão de software remoto OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6 pat OpenSSH_6.6.1 * compat 0x04000000
debug1: Autenticando para 127.0.0.1:2222 como 'vagrant "
debug1: SSH2_MSG_KEXINIT enviou
Conexão fechada por 127.0.0.1

Então ... SSH2_MSG_KEXINIT significa que as chaves estão sendo trocadas. Isso logo falha ...

Nesse caso, excluí minhas chaves e as regenerei fazendo isso na VM. ( http://ask.xmodulo.com/sshd-error-could-not-load-host-key.html )

$ Ls -al / etc / ssh / ssh chave
$ sudo rm -r / etc / ssh / ssh
chave
$ sudo dpkg-reconfigure openssh-server

Uma vez que minhas chaves foram regeneradas, eu pude fazer o SSH na minha caixa Vagrant.

mrjamiebowman
fonte
0

Destruiu a máquina virtual
Recarregou a máquina virtual
Tudo funcionou

Não sei por que, mas obviamente algo não foi carregado corretamente no primeiro provisionamento.

csi
fonte