.ssh / known_hosts 파일을 관리하는 방법


47

나는 버추얼 박스 (Virtual Box)에 가상 서버를 가지고 우분투 데스크톱을 실행하여 물건 등을 테스트했다. 과거에는 다른 종류의 원격 VPS 리눅스 박스에도 연결 해왔다. 현재 내 .ssh/known_hosts파일에는 키가 많이 있으며 대부분 더 이상 사용되지 않습니다.

.ssh/known_hosts파일 을 정리하고 싶지만 어떤 키가 어떤 호스트에 속하는지 어떻게 알 수 있습니까? 즉, 어떤 키를 안전하게 제거 할 수 있고 어떤 키를 혼자 두어야하는지 어떻게 알 수 있습니까?

답변:


64

known_hosts에서 알려진 호스트 이름에 대한 항목을 찾으려면 다음을 수행하십시오.

 # ssh-keygen -H  -F <hostname or IP address>

known_hosts에서 단일 항목을 삭제하려면 다음을 수행하십시오.

 # ssh-keygen -R <hostname or IP address>

27

모든 호스트 목록이 있으면 다음과 같이 할 수 있습니다

ssh-keyscan -t rsa,dsa -f list_of_hosts > ~/.ssh/known_hosts

그러면 호스트 스캔을 기반으로 .ssh / known_hosts 파일을 새로 생성 된 파일로 덮어 씁니다.

또한 상대방이 제안한 것을 수행하십시오. HashKnownHosts는 여기 도움보다 더 성가신 것입니다.


ssh-keyscanlist_of_hosts파일의 형식 규칙이 매우 엄격 합니다. 각 주소 다음에 LF 다음에 LF가 없어도됩니다. 마지막 주소 뒤에 LF가 포함됩니다. 그렇지 않으면 생성 된 파일에 많은 쓰레기가 생깁니다.
Nux

21

어려움으로 ...

우분투는 기본적으로 known_hosts 파일을 호스트 이름으로 해시합니다 (이것은 기본 openssh 동작이 아닙니다). 파일을 읽는 사람이 액세스하는 시스템을 알기가 어렵습니다.

파일을 정말로 지우고 싶다면 가장 간단한 옵션은 파일을 삭제하고 서버가 발생할 때 키를 확인하는 것입니다.하지만 known_hosts는 그대로 둡니다.

/ etc / ssh / ssh_config에서 옵션을 주석 처리하여 새 호스트 항목이 해시되는 것을 막을 수 있습니다

#HashKnownHosts yes

~ / .ssh / known_hosts를 정리하면 원격 호스트의 구성이 변경되고 ssh가 경고를 표시 할 때 도움이됩니다. 그러나 조심해야하며 신뢰할 수있는 호스트에 대해서만 warnnig를 무시하십시오.
Alex

6
더 나은 옵션은 특정 호스트 이름에 대한 해시를 생성하는 방법을 설명하여 known_hosts에서 해시를 검색하여 업데이트 할 수 있도록하는 것입니다.
Cerin

1
위의 변경 후에는 예를 들어으로 새 서버에 연결하여 새 항목을 추가하십시오 ssh root@something-new-or-new-dns-alias. 원본 known_hosts파일 을 새로 고치고 호스트 이름 / IP를 해독합니다.
Nux

2

known_hosts 파일에 오래된 파일이 300 개가 넘었습니다. 모든 시스템 (또는 대부분의 시스템)에서 작동하는지 확실하지 않지만 여기에 내 Q & D 스크립트가 있습니다. 일치하는 문자열이나 위치를 조정해야 할 수도 있습니다.

#!/bin/sh
list=`cat ~/.ssh/known_hosts | awk '{print $1}' |sed -e 's/,/ /g' | sort -u `

listsorted=$(printf "%s\n" ${list[@]} | sort -u)
echo $listsorted
#listsorted="10.2.10.1"
echo > /tmp/sshstat.txt
for host in $listsorted ;
do
echo $host 
ssh -oBatchMode=yes -oConnectTimeout=2  root@${host} "exit" >/tmp/sshstat.txt 2>&1 
ret=$?
if [ $ret -ne 0 ]; then
     echo "Failed: $host"
     echo sed -i.bak \"/$host/d\" "~/.ssh/known_hosts" | sh
else
    grep "Offending RSA" /tmp/sshstat.txt |  sed -e 's/:/ /g' | awk '{printf "sed -i.bak -e \"%dd\" %s  \n", $6, "~/.ssh/known_hosts" }' | sh
   fi
done
#echo $list

이것은 해시 known_hosts파일에서 작동하지 않으며 질문자가 "어떤 키가 어떤 호스트에 속하는지 어떻게 알 수 있습니까?"라고 묻기 때문에 그의 파일이 해시되었을 가능성이 큽니다. 그는 우분투에 있고 theotherreceive우분투는 기본적으로 해시한다고 말합니다.
닐 메이 휴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.