Como corrigir o aviso sobre a chave do host ECDSA

218

Estou tentando configurar o SSH sem senha em um servidor Ubuntu com ssh-copy-id myuser@myserver , mas estou recebendo o erro:

Warning: the ECDSA host key for 'myserver' differs from the key for the IP address '192.168.1.123'

O que está causando isso e como corrigi-lo? Eu tentei excluir o diretório .ssh na máquina remota e executar ssh-keygen -R "myserver" localmente, mas isso não resolve o erro.

    
por Cerin 05.05.2012 / 21:05

12 respostas

318

Remova a chave armazenada em cache para 192.168.1.123 na máquina local:

ssh-keygen -R 192.168.1.123
    
por 05.05.2012 / 22:20
42

No meu caso, ssh-keygen -R ... não corrigiu o aviso. Eu tinha informações extras assim:

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

Eu simplesmente editei manualmente ~/.ssh/known_hosts e excluí a linha 8 (a "chave incorreta"). Eu tentei reconectar, o host foi adicionado permanentemente, e tudo estava bem depois disso!

    
por 11.03.2014 / 19:52
14

Eu faço muito ssh-ing entre meus computadores de LAN e minhas duas contas de webhosting, então eu classifiquei todos os tipos de probabilidades e termina com SSH, incluindo problemas de autenticação usando ssh -v para ver onde e o que deu errado .

Tendo acabado de resolver esse problema e não estar satisfeito com as respostas, eu queria realmente saber "por que" eu mesmo ...

O gatilho para o meu caso é: instalado o novo SO do servidor no trabalho e ao instalar o pacote openssh-server, um novo conjunto de chaves do host foi gerado no servidor do trabalho. Anteriormente, todos os sistemas operacionais do meu servidor eram o Ubuntu e desta vez ele mudou para o Debian (e eu suspeito que existe uma diferença sutil nas permissões).

Quando todos os sistemas operacionais eram Ubuntu e eu reinstalava o sistema operacional de um servidor, no primeiro SSH, recebi esse tipo de aviso, que prefiro acima do aviso silencioso acima!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

Então eu abro ~ / .ssh / known_hosts no computador iniciando o ssh, apago essa linha, reconecto e isso acontece:

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

Esse bit aproximadamente: 11122 é o número da porta na qual eu rotear o SSH no firewall

Eu verifiquei os backups de um antigo servidor Ubuntu e fiz a diferença com a minha nova instalação do Debian:

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

Então, sim, provavelmente, o host começou a usar as chaves ecdsa recentemente, que, com base nas alterações do Ubuntu recentemente, eu culpava uma atualização. A mudança do Ubuntu para longe do sistema operacional linux sólido, com o qual eu contava, é por que eu instalei o Debian desta vez.

Eu li uma segurança.SE q / a no ecdsa e já removi essa linha de sshd_config my new Servidor Debian. (e correu service ssh restart )

    
por 16.01.2014 / 09:12
5

ssh-keygen -f "/ root /.ssh / known_hosts" -R 192.168.1.123

Isso deve substituir as chaves existentes em known_hosts.old e criar uma nova. Essa solução funcionou para mim no mesmo cenário

    
por 14.05.2015 / 20:16
4

O aviso ocorre toda vez porque os endereços IP mudam o tempo todo ao usar o endereçamento dinâmico. Tente usar o IP estático, então você só precisa adicionar a chave apenas uma vez.

    
por 16.01.2014 / 10:06
2

Você está usando o mesmo usuário para se conectar?

Se você estiver logado em um PC local como o usuário John e conectado ao servidor B como o usuário Adolf @ B e tudo estiver OK , isso não significa que tudo está OK se você estiver logado no PC local como o usuário Jane e se conectar ao servidor B como o usuário Adolf @ B .

Se você quiser fazer o login no servidor B como usuário Beda do PC A sem senha, tente este comando, tudo a partir do PC A :

ssh-keygen -t rsa

Este comando gera a chave e armazena a chave no arquivo. Por favor, deixe passphrase vazio.

ssh Beda@B mkdir -p .ssh

Este comando cria o diretório, se eles ainda não existirem. Caso contrário, não imprima uma mensagem de erro.

cd ~/.ssh

Este comando altera o diretório para o diretório inicial do usuário ./ssh.

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

Este comando imprime o arquivo id_rsa.pub (sua chave pública) em authorized_keys no servidor.

IMPORTANTE: Beda é o seu nome de usuário no servidor que você está conectando, B é o IP do seu servidor.

Agora, você pode se conectar ao servidor B sem uma senha ou frase secreta:

ssh Beda@B
    
por 21.10.2014 / 11:17
1

O tópico aqui pode ajudar.

Essencialmente, você deseja remover as chaves RSA e ECDSA para esse host e, em seguida, usar ssh-keyscan para colocá-las de volta no arquivo known_hosts de uma forma que não cause esse conflito. Funcionou para mim quando tive o mesmo problema.

    
por 20.12.2012 / 17:47
1

Pergunta: O que está causando isso, ...?

Portanto, a chave do host do servidor ssh foi alterada. O que causou a mudança? É difícil dizer. Aqui estão algumas suposições:

  • O sshd no myserver começou a usar chaves ECDSA, portanto, é um novo tipo de chave?
  • O myserver foi recentemente reinstalado?
  • O sshd no myserver foi recentemente reinserido para que uma nova chave de host ssh fosse gerada?
  • Alguém regenerou ou substituiu a chave do host sshd?
  • O endereço IP do myserver foi alterado para que um host diferente esteja respondendo a esse endereço IP?

Pergunta: ... e como faço para corrigir isso?

Como outros já responderam, remova a chave do host ECDSA em cache para o myserver que sua conta armazenou em cache.

    
por 07.08.2012 / 17:42
1

Esse erro continuou me irritando por um longo tempo. Por alguma razão, fez a diferença se eu faria um

ssh host

ou

ssh host.domain

link

em seguida, me indicou a opção de alterar o arquivo de configuração. Veja meu script link para automatizar o processo.

    
por 25.08.2017 / 14:43
0

Eu consertei isso em um Chromebook desinstalando e reinstalando o Secure Shell ... Funcionou como um encanto.

    
por 19.05.2015 / 01:26
0

Veja como remover uma impressão digital do host conhecida (do arquivo known_hosts ) em um sistema operacional do Google Chrome:

Encontre o índice da entrada do host incorreto na saída ssh quando a conexão falhar. Por exemplo, na linha abaixo do índice ofensivo está 7 :

Offending ECDSA key in /.ssh/known_hosts:7

Abra o console JavaScript ( CTRL + Desloca + J ) da janela Secure Shell e digite o seguinte, substituindo INDEX pelo valor apropriado (por exemplo, 7 ):

term_.command.removeKnownHostByIndex(INDEX);

Esta solução foi emprestada do Blog de Leo Gaggl .

    
por 24.07.2017 / 09:55
0

Eu adicionei as seguintes linhas ao meu ~ / .ssh / config, desabilitando assim a verificação estrita do host para todos os endereços .local. (com a alocação de endereços DHCP, os endereços IP das minhas máquinas locais estão sempre mudando)

host *.local
    StrictHostKeyChecking no

Você ainda recebe o aviso, o que é bom para mim.

    
por 15.03.2018 / 13:23