Ignorar temporariamente o meu arquivo `~ / .ssh / known_hosts`?

48

Existe uma maneira de ignorar temporariamente meu ~/.ssh/known_hostsarquivo?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

NOTA:

.. com algumas respostas / comentários, percebo que minha pergunta é um pouco enganadora, tão curta que é um comportamento esperado), então é normal (no meu caso) há uma razão válida por trás disso. quer ver "ignore")

alexus
fonte
9
Você está fazendo a pergunta errada. Você não deve "ignorar" o problema; você deve descobrir o que está acontecendo e resolvê-lo.
Michael Hampton
9
Não posso falar pelo usuário, mas um exemplo seria uma situação em que você está desenvolvendo um processo de instalação automatizado (como um kickstart), em que seu fluxo de trabalho iterativo envolve a construção, conexão, teste, modificação do processo de compilação e reconstrução de arranhar uma e outra vez.
Goladus 17/04/2015
10
@ MichaelHampton - eu recebo isso o tempo todo, pois o VMware e o VirtualBox reciclam endereços IP para convidados. Para mim, é a pergunta correta :)
11
FWIW Continuo pesquisando por essa resposta porque tenho um sistema na minha LAN onde uso um dropbear (com uma chave de host diferente) para inserir a senha de criptografia de disco durante a inicialização.
Zulan
11
@jww Esta é a pergunta / solução errada para o seu cenário. Em vez disso, você deve configurar o SSH para ignorar o endereço IP, mas ainda assim verificar a chave do host. Veja, por exemplo, aqui
Jon Bentley

Respostas:

56

Você pode usar ssh -o StrictHostKeyChecking=nopara desativar a verificação known_hostsmomentaneamente. Mas eu desaconselharia isso. Você realmente deve verificar por que a chave do host mudou.

Outra opção é adicionar uma entrada específica à sua ~/.ssh/configpara o host em questão. Essa pode ser uma abordagem válida se você tiver um determinado host que gera novas chaves de host toda vez que ele é reiniciado e é reiniciado por um motivo válido várias vezes ao dia.

Host <your problematic host>
  StrictHostKeyChecking no
Sami Laine
fonte
que é o comportamento esperado) por isso é normal (no meu caso)
alexus
11
@alexus Se for "esperado", você poderá aplicar a opção a um nome de host / IP específico para o qual espera que isso aconteça.
usar o seguinte comando
11
@alexus E lembre-se de que, se você fizer isso, perderá praticamente toda a proteção que o ssh fornece. Você também pode estar usando o telnet, pois seria trivial para alguém MITM e capturar todo o seu tráfego.
Michael Hampton
11
Isso não funciona mais (pelo menos para o OpenSSH_5.3p1)
detalha
-o StrictHostKeyChecking=noremove a capacidade de efetuar login com uma senha. A falta de um sinalizador para isso contraria diretamente os princípios unix de permitir que o usuário force o comportamento? Atualmente, estou tentando fazer login em uma máquina local com um IP local. A chave do host mudou porque eu reformatei a máquina. Tudo aqui faz sentido e nada é um risco de segurança nessas circunstâncias.
Wowfunhappy 26/09
31

Para ignorar completamente o arquivo de hosts conhecidos em um ambiente POSIX, configure as opções GlobalKnownHostsFilee UserKnownHostsFilepara /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

Definir a StrictHostKeyChecking=noopção permitirá que você se conecte, mas o SSH ainda mostrará um aviso :

ssh -o StrictHostKeyChecking=no user@host

Como outros observaram, provavelmente é melhor abordar a questão subjacente. Você pode considerar a autenticação de certificado SSH para verificar hosts, por exemplo.

MattB
fonte
2
Essa pode ser uma resposta melhor do que a mais votada atualmente, porque permite usar a autenticação por senha que seria desativada de outra forma (é claro, você deve entender exatamente o que está fazendo antes de digitar sua senha ...)
VZ.
Estou um pouco confuso aqui: você também não deve usar -o StrictHostKeyChecking=no além das -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullopções? - para uma resposta final de ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host:?
Gabriel Staples
Artigo
Gabriel Staples
5

Se você reinstalou o servidor e, portanto, a Identificação mudou, você deve excluir a linha 155 especificada /Users/alexus/.ssh/known_hostse prosseguir.

Se você alternar entre redes privadas diferentes, use nomes de host para se conectar, pois o cliente ssh também salvará as chaves, dependendo do nome do host. Adicione algo assim ao seu /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

e use ssh server1quando estiver conectado à sub-rede 1 e ssh server2quando estiver conectado à sub -rede2. Dessa forma, os dois servidores podem ter chaves de host diferentes.

etagenklo
fonte
E se você alternar entre duas redes privadas e se conectar a dois mesmos IP?
alexus
11
Eu editei minha resposta.
precisa saber é o seguinte
2
@alexus Então você precisa do IPv6 :) Mas isso teria sido uma informação útil na sua pergunta original.
Michael Hampton
2

-o StrictHostKeyChecking=no só funciona se o host ainda não estiver presente no arquivo known_hosts.

Eu acho que é mais limpo (sem avisos), se você espera que a chave dos hosts mude, talvez devido à clonagem vm, para forçar a ignorância desses tipos de hosts como este:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"
Jose Sa
fonte
2

Algumas pessoas dizem que não é certo, você não deve fazer isso e assim por diante, mas eu preciso disso também para testar alguns dispositivos incorporados repetidamente. Você precisa desativar StrictHostKeyChecking=no, isso está correto, mas também redefinir o arquivo de hosts conhecidos para /dev/null. Aqui está um exemplo com login automático e psno dispositivo remoto.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
eddso
fonte
-2

Faça logon em todos os seus servidores (e se RedHat) rm -f /etc/ssh/ssh_host_*e reinicie o SSHD.

Isso criará novas chaves de host SSH que não precisam ser ignoradas.

Só consigo pensar em uma instância em que as chaves SSH clonadas em vários servidores não são apenas desejadas, mas também não emitem nenhum aviso. Múltiplos de um registro A. Todos os hosts com o registro A têm a mesma chave.

Niels
fonte
6
Esta resposta está incorreta. A impressão digital é local no cliente.
você precisa saber é o seguinte