호스트 이름 목록으로 암호화 된 .ssh / known_hosts의 호스트 이름을 해독하는 방법은 무엇입니까?


14

hostnamses 목록을 전달 하여 known_hosts 파일에서 ssh 호스트 이름 을 해독 (해시 해제) 하는 스크립트를 찾으려고 합니다.

따라서 정확히 반대의 작업을 수행하려면 다음을 수행 하십시오 .

ssh-keygen -H -f known_hosts

또는 ssh config HashKnownHosts가 No로 설정된 경우 이와 동일하게 수행하십시오.

ssh-keygen -R know-host.com -f known_hosts
ssh-keyscan -H know-host.com >> known_hosts

그러나 ssh-keyscan으로 인해 호스트 키를 다시 다운로드하지 않습니다.

다음과 같은 것 :

ssh-keygen --decrypt -f known_hosts --hostnames hostnames.txt

여기서 hostnames.txt에는 호스트 이름 목록이 포함되어 있습니다.


호스트 이름은의 항목 중 일부입니다 known_hosts. 해독해야 할 것은 무엇입니까?
muru December

2
암호화 된 known_hosts 파일을 의미합니다. ssh 구성 HashKnownHosts가 Yes 인 위치 제목을 수정했습니다.
Xorax

답변:


22

known_hosts파일의 행은 암호화되지 않으며 해시됩니다. 암호화되지 않았기 때문에 해독 할 수 없습니다. 해시 에 관한 모든 것 — 해시 가 주어지면 원본 문자열을 발견하는 것은 불가능 ¹이므로 해시 할 수 없습니다 . "해싱 해제"하는 유일한 방법은 원래 문자열을 추측하고 추측을 확인하는 것입니다.

호스트 이름 목록이 있으면이를 호스트 이름으로 전달하고 ssh-keygen -F호스트 이름으로 바꿀 수 있습니다.

while read host comment; do
  found=$(ssh-keygen -F "$host" | grep -v '^#' | sed "s/^[^ ]*/$host/")
  if [ -n "$found" ]; then
    ssh-keygen -R "$host"
    echo "$found" >>~/.ssh/known_hosts
  fi
done <hostnames.txt

¹ 실질적인 의미에서, 즉 오늘날 존재하는 모든 컴퓨터가 현재 우주보다 더 오래 걸릴 것입니다.


13

ssh-keygen (1) 매뉴얼 페이지에 -F hostname옵션에 대한 설명이 있습니다.

known_hosts 파일에서 지정된 호스트 이름을 검색하여 발견 된 항목을 나열하십시오. 이 옵션은 해시 된 호스트 이름 또는 주소를 찾는 데 유용하며 -H찾은 키를 해시 형식으로 인쇄 하는 옵션 과 함께 사용할 수도 있습니다 .

이것은 당신이 원하는 것 같습니다.


해시 된 호스트 이름이있는 행을 반환합니다. known_hosts 파일에서 대체하기 위해 해시하고 싶습니다. 각 줄을 구문 분석하고 해시 해제 한 다음 known_hosts 파일에서 바꾸려면 스크립트가 필요합니다.
Xorax

2
@Xorax 예. 그러나이 명령을 사용하면 해시 된 호스트 이름을 검색하여 known_hosts파일 에서로 바꿀 수 sed있습니다.
vinc17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.