제 구글 검색 결과가 별로 도움이 되지 않아서 여기에 문의드립니다.
내 Ubuntu 서버에는 이제 두 파일 모두에 중복된 ~/.ssh/authorzied_keys
항목이 많이 있습니다.~/.ssh/known_hosts
중복된 줄을 제거하고 한 번만 나열할 수 있는 명령/유틸리티가 있는지 궁금합니다.
답변1
명령줄 유틸리티는 uniq
and 이라고 합니다 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
각 복사본 중 하나를 유지하려고 하므로 가장 쉬운 해결책은 텍스트 편집기를 사용하여 더 이상 올바른 정보가 포함되지 않은 각 파일의 행을 삭제하는 것입니다.