SSHknown_hosts 및authorized_keys 파일에서 중복 항목을 지우는 방법은 무엇입니까?

SSHknown_hosts 및authorized_keys 파일에서 중복 항목을 지우는 방법은 무엇입니까?

제 구글 검색 결과가 별로 도움이 되지 않아서 여기에 문의드립니다.

내 Ubuntu 서버에는 이제 두 파일 모두에 중복된 ~/.ssh/authorzied_keys항목이 많이 있습니다.~/.ssh/known_hosts

중복된 줄을 제거하고 한 번만 나열할 수 있는 명령/유틸리티가 있는지 궁금합니다.

답변1

명령줄 유틸리티는 uniqand 이라고 합니다 sort. 고유한 항목만 얻으려면 파일을 파이프로 연결하면 됩니다.

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

그런 다음 이전 파일을 새 파일로 바꿉니다.

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

이는 ~/.ssh/known_hosts자체적으로 처리되며 ssh중복 항목을 포함해서는 안 됩니다(수동으로 수정하는 경우 가능하며 위와 동일한 방법을 사용할 수 있습니다).

답변2

ssh-keygen -R hostname지정된 호스트 이름에 대한 항목을 삭제합니다.

답변3

내 문제는 다른 호스트 키를 가진 한 호스트의 여러 항목입니다. 이것은 Jenkins 빌드 슬레이브에서 가져온 것입니다. 애플리케이션 서버가 재구축되었습니다. 호스트 이름/IP가 새 서버로 이동되었지만 호스트 키가 다릅니다. 내가 생각해낸 라이너는 다음과 같습니다.

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

Known_hosts의 첫 번째 필드를 가져와 정렬하여 uniq -c각 호스트 이름의 인스턴스 수를 계산하고, sed개수가 1인 모든 행을 제거한 다음 ssh-keygen -R호스트를 제거하고 마지막으로 ssh-keyscan현재 호스트 키를 Known_hosts에 다시 추가합니다.

경고: 호스트 키를 변경하지 않으려면 이 명령을 실행하기 전에 호스트 키가 변경된 이유를 파악해야 합니다. 호스트 키는 예상한 호스트(중간 사람이 아님)에 연결되도록 보장합니다.

답변4

각 복사본 중 하나를 유지하려고 하므로 가장 쉬운 해결책은 텍스트 편집기를 사용하여 더 이상 올바른 정보가 포함되지 않은 각 파일의 행을 삭제하는 것입니다.

관련 정보