서버 및 known_hosts의 ssh 지문이 일치하는지 테스트


0

문제가 있습니다. known_hosts 및 원격 서버의 ssh 지문과 일치하는 bash 스크립트가 필요합니다. 여기 내가 가진 것입니다 :

keyFile=$(mktemp)
ssh-keyscan -H $ip > $keyFile 2> /dev/null
hashRemote=$(ssh-keygen -f $keyFile -H -F $ip | sed -n -r -e 's/^[^#][^ ]+ [^ ]+ ([^ ]+)$/\1/p')
hashLocal=$(ssh-keygen -f ~/.ssh/known_hosts -H -F $ip | sed -n -r -e 's/^[^#][^ ]+ [^ ]+ ([^ ]+)$/\1/p')
rm $keyFile

echo $hashRemote
echo $hashLocal

문제는 출력이 일관성이 없다는 것입니다. od od_hosts 컨텐츠는 지원되는 키 유형에 따라 다릅니다. 따라서 ssh-keygen의 출력은 다음과 같습니다.

# Host 10.0.0.35 found: line 1 type RSA                                                          
|1|H24d9m0xG5zrw6QBkigVjarwTFw=|xpisuvwhtqsNkH0CJ6pYoB/y1G8= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAB
AQC1Ge/M8bA7nQsbMPy8JmFo6T3Ls2FXR01HyHoW5uwTeW3EoaD39IemRYmkDHLZwlQiLSSrw/kgkHATtQ4pqyg0o5mJoajmw
czUQ78Poavea60OYXJWLh12uZlRjyiu/tQXdHaBI3YwCNnP827t4guvJjpdOAsFgZqfuX9qERGPJMHj0YqRelanB9Za3Fueb9
QsT8wOe/wPCw2YwGapUndcUMoChmN2YRMjRk1JU4DPXiQ56+A2S9V4iP+drZfoK3c3tCdUOVUxCPEwqCraav+viSNq2odVL9F
79jIGxP43TqUcCyMcFU7vGEVshVu7gvUl7KKCMa0wu5pr+Z1X3zUn                                            
# Host 10.0.0.35 found: line 3 type ECDSA                                                        
|1|XdzrIRaJLfushc3efDRkNAJwqcQ=|UUyGx6z6I61mqMVRh/j/5+zs6eA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNo
YTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLvteJqElWirJtA75IuDtvwKIbGfbvdCE+O/6bkFhj6oFlSVZqqecmm+MzRca
aLg30hLxLpO8bxwVxeVY62sDg8=

한 유형은 RSA이고 다른 유형은 ECDSA입니다. 내 질문은 known_hosts 및 원격 지문을 어떻게 든 일치시킬 수 있습니까? 미리 감사드립니다 ...


첫 번째 토큰 또는 때로는 두 개 이후의 파일 출력 ssh-keyscan및 내용은 known_hosts실제 공개 키이며 지문이 아닙니다. 끊어지고 더 이상 사용되지 않는 SSHv1을 사용하지 않는 한 형식은 항상 유형 뒤에 base64 얼룩을 나타내는 단어입니다. 서버 / 호스트에는 일반적으로 둘 이상의 공개 키 유형이 있습니다. 당신이 원하는 경우 ssh-keyscan(비교 예) 유형의 특정 유형 또는 목록 사용 얻을 수 -t있지만,이 이후에 사용되는 유형, 키,하지 않을 수 있습니다 - 매뉴얼 페이지 당 ssh연결합니다.
dave_thompson_085

귀하의 경우 known_hosts에 ecdsa-sha2-p256이있는 것처럼 보이므로 아마도 ssh-keyscan의 유형으로 사용하려고합니다.
dave_thompson_085

글쎄, 나는 타입을 강제 할 수 있다는 것을 알고 있지만, 우리는 많은 유형을 가진 많은 장치를 가지고 있으며 어떤 장치가 어떤 유형을 가지고 있는지 모릅니다. 같은 형식으로 server / known_host에서 데이터를 읽는 방법이 없습니까? 아니면 다른 방법? 아마 일부 유틸리티 ..
user67714

'장치'(서버)에 어떤 키 유형이 있는지 알려면이를 요청해야합니다. 당신이 할 수 ssh-keyscan-t버전에서 지원하는 모든 keytypes로 설정 (참조 ssh -Q key경우 6.5까지)과 서버가 무슨 표시하고 자동으로 다른 사람을 무시합니다. 해시 된 known_hosts에있는 항목을 찾으려면 행을 찾은 다음 ssh-keygen -F host예를 들어 awk '!/^#/{print $2}'또는 $(NF-1)옵션이 포함 된 행을 처리해야하는 경우를 찾으십시오. 아니면 sed, 또는 grep당신이있는 경우 -Po, 또는 (PCRE 매칭 및 선택적 출력) perl, 또는 외피를 내장 read; 이것은 매우 기본입니다.
dave_thompson_085
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.