minha solução alternativa para hosts locais que são muito reinstalados é configurar o ssh para que os IPs locais usem / dev / null para o arquivo hosts (perigoso, tenha cuidado).
Eu instalei uma imagem do servidor Ubuntu no VirtualBox. Em seguida, configurei o encaminhamento de porta 2222 = > 22.
Quando uso o seguinte comando, tudo funciona bem:
ssh -p 2222 [email protected]
A senha é solicitada e eu posso fazer o login no Ubuntu no VBox.
No entanto, quando eu uso:
ssh -p 2222 java@localhost
eu obtenho o seguinte
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is ......... Please contact your system administrator. Add correct host key in /Users/cristian/.ssh/known_hosts to get rid of this message. Offending RSA key in /Users/cristian/.ssh/known_hosts:2 RSA host key for [localhost]:2222 has changed and you have requested strict checking. Host key verification failed.
Claro
ping localhost PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.038 ms
Alguma ideia do porquê?
Obrigado
Apenas para reafirmar o problema (para esclarecer algumas questões nos comentários): A pergunta original indica que o NAT é usado, portanto, tanto o host que executa a VM quanto a própria VM são identificados pelo 127.0.0.1, conhecido como localhost. Assim, a partir do host, pode-se efetuar login na VM usando o encaminhamento de porta (indicado) mapeando a porta do host 2222 para a porta VM 22. Se tivermos várias VMs lançadas, todas com configuração de rede semelhante, ela aparecerá para o cliente ssh como o alvo está mudando (porque é).
Então, para a pergunta original, abordar o problema em questão: em vez de configurar ssh
para usar /dev/null
para o arquivo de hosts (o que poderia ser feito por host em ~/.ssh/config
, especificamente para localhost), pode-se simplesmente atribuir às VMs um nome exclusivo no arquivo /etc/hosts
e, em seguida, referenciá-las usando o nome do host, em vez de 127.0.0.1 ou localhost. Portanto, cada VM terá seu próprio nome no arquivo de hosts conhecidos do host. Por exemplo,
$ sudo vim /etc/hosts
...
127.0.0.1 localhost my_real_hostname
127.0.0.1 my_vm1
127.0.0.1 my_vm2
...
As novas VMs podem ser adicionadas conforme necessário (adicionando as VMs em uma única linha ou, em linhas separadas, o que pode facilitar a criação de scripts nas adições / exclusões via sed
(um exercício deixado para o leitor) ).
Em seguida, para fazer login na VM, use o novo nome de host, que realmente é mapeado para 127.0.0.1 (novamente, supondo que o encaminhamento de porta esteja configurado nas configurações de rede avançadas do VirtualBox da máquina virtual),
$ ssh -p 2222 vm_user@my_vm2
The authenticity of host '[my_vm2]:2222 ([127.0.0.1]:2222)' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[my_vm2]:2222' to the list of known hosts.
E para removê-lo,
$ ssh-keygen -R '[my_vm2]:2222'
# Host [my_vm2]:2222 found: line 16
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
Note que o mesmo poderia ser feito (repetidamente) com o host local que estava causando o problema original,
$ ssh-keygen -R '[localhost]:2222'
# Host [localhost]:2222 found: line 16
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
Tags ssh virtualbox ubuntu macos