Como limpar entradas duplicadas nos arquivos SSH known_hosts e authorized_keys?

5

Meus resultados de pesquisa no google são pouco úteis, então eu perguntei aqui.

Meu servidor Ubuntu agora tem muitas entradas duplicadas em ambos os arquivos ~/.ssh/authorzied_keys e ~/.ssh/known_hosts

Gostaria de saber se existe um comando / utilitário para remover essas linhas duplicadas e listá-las apenas uma vez?

    
por Nam G VU 19.01.2017 / 06:02

4 respostas

6

Os utilitários de linha de comando são chamados de uniq e sort . Você pode simplesmente enviar o arquivo por meio deles para obter apenas entradas exclusivas:

sort ~/.ssh/authorized_keys | uniq > ~/.ssh/authorized_keys.uniq

e, em seguida, substitua o arquivo antigo pelo novo:

mv ~/.ssh/authorized_keys{.uniq,}

O ~/.ssh/known_hosts é manipulado pelo ssh em si e não deve conter nenhum duplicado (se você modificou manualmente, ele pode e, em seguida, você pode usar a mesma abordagem acima).

    
por 19.01.2017 / 08:37
1

ssh-keygen -R hostname removerá a entrada do nome do host especificado

    
por 19.01.2017 / 06:19
1

Como você deseja manter um de cada um dos duplicados, a solução mais simples é provavelmente usar apenas um editor de texto para excluir as linhas de cada um desses arquivos que não possuem mais as informações corretas.

    
por 19.01.2017 / 06:28
1

Meu problema era com várias entradas de um host com chaves de host diferentes. Isto foi de um escravo da construção Jenkins. O servidor de aplicativos foi reconstruído. O nome do host / IP foi movido para o novo servidor, mas as chaves do host eram diferentes. Aqui está o único forro que eu criei:

cat known_hosts | cut -f1 -d' ' | sort | uniq -c | \ 
sed '/^ *1 /d' | awk '{print $2}' | while read line; do \
ssh-keygen -R $line; ssh-keyscan $line; \
done

Pegue o primeiro campo em known_hosts, classifique-o, uniq -c para contar as instâncias de cada nome de host, sed para excluir as linhas com uma contagem de 1, depois ssh-keygen -R para remover o host e finalmente ssh-keyscan para adicionar a chave do host atual de volta a known_hosts.

AVISO: Se você não esperava que as chaves do host fossem alteradas, você deve descobrir por que elas o fizeram antes de executá-lo. As chaves do host estão lá para garantir que você esteja se conectando ao host que espera (e não a algum homem no meio do host).

    
por 12.03.2018 / 16:00

Tags