Questão Remover chave de known_hosts


Eu construí várias máquinas virtuais durante as últimas semanas. O problema é que o .ssh/known_hosts me dá o Homem no meio Atenção. Isso acontece porque outra impressão digital está associada ao IP da máquina virtual.

No .ssh/known_hosts arquivo, no entanto, eu não encontro o registro relacionado ao IP, apenas duas seqüências de caracteres bizarro, chave e "ssh-rsa".

Alguém tem alguma idéia sobre como remover a chave antiga de known_hosts?


110


origem


As "strings bizarras, parecidas com teclas", às quais você se refere são os hosts / endereços IP com hash. Este é um recurso de segurança que ajuda a impedir que um intruso saiba a quais sistemas você tem acesso. Se você ver isso, então o seu ssh_config tem HashKnownHosts yesconjunto. - Deebster
Se você achar que o conteúdo do arquivo é muito confuso, provavelmente terá o envolvimento de linha ativado. Desativar. Todas as linhas começam com um nome de host ou um endereço IP. - Daniel B


Respostas:


sed -i '6d' ~/.ssh/known_hosts

Modificará o arquivo ~ / .ssh / known_hosts: 6, removendo a 6ª linha.

Na minha opinião, usando ssh-keygen -R é uma solução melhor para um usuário de poder do openssh, enquanto seu administrador regular do Linux faria melhor para manter suas habilidades sed novas usando o método acima.


76



Não acho que seja um bom conselho editar um arquivo de configuração manualmente se você tiver um aplicativo oficial para isso. Assumir riscos não faz de você um profissional, encontrando a opção mais rápida e segura. É como dizer às pessoas para irem em frente e editarem /etc/sudoers sem visudo. Se você quiser aguçar o seu sed habilidades, vá em frente e faça isso sem atrapalhar o seu sistema. - kraxor
"se você tem um pedido oficial para isso" => ambos ssh-keygen -R e sed -i {line}d são bastante "oficiais" e ambos funcionarão no futuro previsível. O utilitário ssh-keygen permite a remoção por número de linha, ambos são perfeitamente aceitáveis ​​(porque os números de linha geralmente são mais fáceis de lidar e menos propensos a erros do que lidar com nomes de host de data center modernos). - michael
A) A exclusão de especificamente a sexta linha, é tudo muito "não olhe para as mãos". Nenhuma explicação sobre o que é significativo na sexta linha do arquivo ?! B) também man ssh-keygen menções ssh-keygen -R hostname  você acabou de dizer ssh-keygen -R sem hostname especificado, e você não explicou o que você quer dizer com isso. - barlop


A solução mais simples é:

rm -f .ssh/known_hosts

O ssh recriará o arquivo novamente, mas você perderá a verificação das chaves para outros hosts!

Ou você pode usar:

ssh-keygen -R "hostname"

Ou a mensagem "man-in-the-middle" do ssh deve indicar qual linha do arquivo known_hosts tem a impressão digital ofensiva. Edite o arquivo, salte para essa linha e exclua-o.


89



ssh-keygen -R hostname vai funcionar também. - grawity
Se removermos esse arquivo, outras chaves serão removidas também. - shgnInc
Remover o arquivo é um mau conselho, é como dizer a alguém para comprar um novo PC porque o antigo tem um mouse quebrado. Editar manualmente um arquivo que pode ser editado por um aplicativo oficial também é uma má ideia. o ssh-keygen opção foi adicionada por causa de um comentário, mas sem explicação. Eu não acho que essa resposta mereça tantos votos positivos. - kraxor
-1 por causa de todo o primeiro "excluir todo o arquivo known_hosts" primeiras linhas. Essa é uma coisa terrível, terrível e terrível a ser proposta e deve ser editada. - Olivier Dulac
Esta solução é um exagero. Apenas remova a linha ofensiva. É isso aí. - Blake Frederick


Existe um switch ssh-keygen (-R) para isso.

o homem ssh-keygen lê:

-R nome do host                Remove todas as chaves pertencentes ao nome do host de um arquivo known_hosts. este                A opção é útil para excluir hosts com hash (veja a opção -H acima).


54



Este é o método mais fácil e seguro. - Leo
Nota: Isso alterará as permissões do arquivo known_hosts para 0600. Se você tiver um arquivo shared_hosts compartilhado por algum motivo, isso pode desativar o compartilhamento dele. - Jiri Klouda


O aviso informará a linha exata no arquivo de hosts conhecidos.

Aqui está um exemplo:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Veja o /home/user/.ssh/known_hosts:6 parte? Especifica o arquivo e o número da linha.


15





Você também pode instruir o ssh a não verificar o arquivo known_hosts usando os flags UserKnownHostsFile e StrictHostKeyChecking.

Por exemplo:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Para facilitar o uso, você pode aliasar isto:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Agora você pode apenas boldssh sempre que tiver certeza de que confia no certificado do servidor.


8



Que idéia horrível. Desabilite permanentemente uma camada de segurança apenas porque você é muito preguiçoso ~/.ssh/known_hosts atualizado? Por que não ir em frente e usar telnet? "sempre que tiver certeza" - se você tiver certeza, então você não tem idéia do que é um ataque MITM e provavelmente deveria passar algum tempo lendo alguma boa literatura. - kraxor
Com base na pergunta do OP, acho que esta é uma resposta válida. Às vezes você tem um sistema de teste que está criando / destruindo muitas VMs. (Estou fazendo isso agora, enquanto me preparo para o exame RHCE.) Pode não haver implicações de segurança. Embora a observação das implicações de segurança seja ótima, não acho que isso deva ser rotulado de "ideia horrível". - Rick Chatham
Relacionado: superuser.com/a/1126243/73961 - michael


Você precisa executar o seguinte comando para se livrar desse problema. Abra o terminal e digite o seguinte comando:

Para todos os exemplos abaixo, basta substituir o valor após -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com

4



Este método já foi sugerido nas respostas anteriores. Você poderia expandir o que é diferente em sua resposta? - Burgi
@Burgi - esta resposta dá mais detalhes sobre a sintaxe de ssh-keygen -Rdo que qualquer outra resposta até agora. Ele mostra por exemplo exatamente o que você pode escrever depois -R. Portanto, esta resposta vale a pena, mesmo que não seja uma resposta totalmente nova. - Yitz
@ Yitz O meu comentário foi feito como parte da revisão. Na época (18 meses atrás), achei que a pergunta precisava de uma pequena ajuda para melhorar ainda mais. - Burgi


Você também pode remover uma única linha de hosts conhecidos com, e. rmknownhost 111 (111 é a linha a ser removida):

#! /usr/bin/env ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

Guarde isto como rmknownhost em uma pasta do seu PATH.


2



Qual é o benefício disso ao fazer isso em qualquer editor de texto? Existe alguma razão para não fazê-lo dessa maneira, assim como os sudoers precisam ser editados com o visudo? - Andy Lester
Que distros vêm com isso? O Ubuntu não parece ter isso. - flickerfly
O benefício é que é automatizado e rápido / é um binário separado que você mesmo adiciona - grosser
Você poderia ter postado seu script aqui em vez de vincular sua própria entrada de blog que você criou no dia em que postou essa resposta. Isso se qualifica como spam IMHO. Para não mencionar que você poderia criar um alias simples para alcançar o mesmo resultado, não há necessidade de um script longo de 7 linhas ruby. - kraxor


A entrada para o nome do host ou ip deve estar na primeira coluna. O aviso também deve listar um número de linha onde a chave incorreta está.


0





É um arquivo de texto. Você pode facilmente editar com vi (m) e simplesmente excluir a linha em questão (dd), e salve o arquivo (wq). Mas se houver um comando específico para remover um host, esse é provavelmente o método mais seguro.


0



Não vejo como editar o arquivo diretamente no VIM é "inseguro". É baseado no seu nível de conforto com o VIM. Especialmente com este arquivo, o maior risco que você tem é excluir muitas chaves, nesse caso você será solicitado novamente. - Rick Chatham
A "segurança" a que me refiro envolve 1) esquecer / não saber remover informações dependentes em outros arquivos (se houver) e 2) excluir acidentalmente mais ou menos do que precisa ser, quebrando assim o arquivo. - Ryan Griggs


Todas as respostas são boas, mas para o SSH pro real faltam informações sobre como remover a assinatura do ssh com o número da porta.

Por exemplo. você se conecta a

ssh some.host.name -p 222

e você recebe um aviso, e para remover isso, você precisa usar o número de porta de dois pontos entre colchetes:

ssh-keygen -R [some.host.name]:222

Espero que isso ajude para usuários de configuração não padrão.


0