Eu ssh regularmente em um computador que é um computador com OS X / Linux de inicialização dupla. As duas instâncias do SO não compartilham a mesma chave do host, portanto podem ser vistas como dois hosts compartilhando o mesmo IP e DNS. Digamos que o IP seja 192.168.0.9
e os nomes sejam hostname
ehostname.domainname
Até onde eu entendi, a solução para conectar-se aos dois hosts é adicioná-los ao ~/.ssh/know_hosts
arquivo. No entanto, é mais fácil dizer do que fazer, porque o arquivo é hash, e tem provavelmente várias entradas por host ( 192.168.0.9
, hostname
, hostname.domainname
). Como consequência, tenho o seguinte aviso
Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'
Existe uma maneira fácil de editar o known_hosts
arquivo, mantendo os hashes. Por exemplo, como posso encontrar as linhas correspondentes a um determinado hostame? Como posso gerar os hashes para alguns hosts conhecidos?
A solução ideal seria permitir-me para ligar para perfeitamente a este computador com ssh, não importa se eu chamá-lo 192.168.0.9
, hostname
ou hostname.domainname
, nem se ele usa sua HostKey Linux ou seu HostKey OSX. No entanto, ainda quero receber um aviso se houver um ataque real no meio, ou seja , se outra chave além dessas duas for usada.
Respostas:
A solução mais direta aqui é apenas usar as mesmas chaves de host para Linux e OS X. Ou seja, escolha um conjunto de
/etc/ssh/ssh_host_*_key*
arquivos e copie-os para o outro SO. Em seguida, a mesma chave de host será apresentada a um cliente SSH, independentemente do sistema operacional em que você inicializou, e o cliente SSH não será o mais sábio.fonte
/private/etc/ssh_host*
não é/etc/ssh/ssh_host*
.sshd
carrega as chaves do host uma vez na inicialização, portanto, você provavelmente precisará reiniciarsshd
. Vou acrescentar isso à resposta. Quanto a outras soluções serem melhores, isso depende da sua situação. Eu argumentaria que os principais profissionais desse método são que ele requer apenas uma configuração única e é mais provável que funcione com várias implementações de clientes SSH.sshd
carrega chaves de host em cada nova conexão. Talvez tenha sido assim há muito tempo e eu apenas assumi que as chaves do host foram tratadas como outrasshd
configuração. Enfim, isso pode ou não ser o seu problema.Como o @Izzy sugeriu em um comentário acima, o ssh informa a linha incorreta e, removendo-a (salvando-a em outro lugar), aceitando a nova chave e copiando a linha removida, você termina com duas chaves para a mesma host e o ssh aceitará qualquer um.
(Você também pode usar
ssh-keygen -H -F <hostname>
para encontrar linhas no arquivo known_hosts que correspondam a esse nome de host. A execução após copiar a linha removida de volta deve listar duas entradas.)Se alguém souber como fazer o PuTTY fazer a mesma coisa, eu ficaria muito interessado em ouvir sobre isso.
fonte
Encontrei isso que pode ajudá-lo com o que você deseja alcançar.
Fonte: /programming/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but
fonte
known_hosts
eCheckHostIP
.A maneira mais fácil de resolver seu problema é fornecer a cada host um endereço IP próprio / distinto. Com 253 endereços disponíveis na sua rede (privada) e IPv4, isso não deve ser grande coisa. Dê a eles IPs fixos (como um servidor DHCP identificaria a máquina com base no endereço MAC das placas de rede e ambos obteriam o mesmo endereço). Não vejo outra solução se você quiser manter as medidas de segurança (que eu também não deixaria de lado por esse pequeno "conforto").
fonte
192.168.0.xx
é e não é privado. É um endereço IPv4 'real', fornecido pela minha universidade, que não tenho a liberdade de alterar.Não encontro esse problema ao conectar-me a várias caixas VPS que compartilham o mesmo IP, pois cada uma possui uma porta SSH diferente (20022,30022, etc), portanto, elas são registradas como hosts conhecidos com chaves diferentes.
Isso poderia ser uma solução alternativa para você?
fonte
Outro artigo , que descreve várias maneiras de lidar com seu problema:
fonte
hostname
for reinicializada no Linut ou OSXComo você deseja manter a verificação estrita da chave do host, gostaria que eles usassem
known_hosts
arquivos diferentes . Para fazer isso, configure seu~/.ssh/config
arquivo (ou o/etc/ssh/ssh_config
arquivo, se necessário, para que ele funcione em várias contas de usuário local) assim:, substituindo
$REALHOSTNAME
pelo nome do host ou endereço IP real, é claro. (Não importa qual você escolher, contanto que você escolha algo após "Hostname" que resolveria o endereço IP, mas eu usaria o nome do host em preferência a um endereço IP, apenas por princípios gerais.)Em seguida,
ssh myserver.linux
essh myserver.osx
pode, assim, ter chaves de host diferentes, mas você ainda obter a verificação. Se for o Linux instalado e você digitar o OS X (ou vice-versa), receberá o aviso (que acredito ser o efeito desejado).Se eu tivesse esse problema, garantiria que houvesse algo completamente errado no
known_hosts
arquivo principal que não corresponda a nenhum dos dois, portanto, se você digitar em$REALHOSTNAME
vez demyserver.osx
receber o aviso. :-) eu faria isso colocando algo comono meu
/etc/hosts
, em seguida, fazendo umssh $REALHOSTNAME
e aceitando a nova chave, retirando essa entrada.fonte