SSHFP Hex와 ssh-keygen SHA256 Base64 간에 변환하는 가장 쉬운 방법은 무엇입니까?

SSHFP Hex와 ssh-keygen SHA256 Base64 간에 변환하는 가장 쉬운 방법은 무엇입니까?

GitLab 서버의 SSH 지문을 확인하려고 합니다. 그것은공개된 지문아마도 로드 밸런싱 때문에 잘못된 것 같습니다.VerifyHostKeyDNS=yes오류는 없지만 지문을 볼 수 없다고 생각하고 연결하지 않고 하고 싶습니다.

SSHFPSHA1 및 SHA256은 16진수입니다. 또한 "4 2"와 같은 숫자 ID를 "SHA256 (ED25519)"와 같은 영어 이름으로 변환하고 싶습니다.

$ resolvectl query -t sshfp ssh.gitlab.gnome.org
ssh.gitlab.gnome.org IN SSHFP 1 1 9d319c15965b939bc2086cbebca96d8bbb89e9a3 -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 1 2 591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118 -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 3 1 17b29179778339d7c91cb2c281b7afa2798c61d5 -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 3 2 4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 4 1 457e9cb0d575697e27fe8b2185580df5d45ce46b -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 4 2 63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc -- link: enp39s0

-- Information acquired via protocol DNS in 1.1133s.
-- Data is authenticated: yes; Data was acquired via local or encrypted transport: yes
-- Data from: network

하지만,ssh-keyscanSHA1 및 SHA256의 Base64를 제공합니다. SSHFP에 없는 MD5만 16진수입니다. SHA256 Base64는 git연결할 때 메시지를 표시하는 형식 이기도 합니다 . 내 사용 사례는 지문을 수동으로 확인한 다음 어떻게 든 이를 신뢰하는 것입니다 ~/.ssh/known_hosts. 단순화를 위해 ED25519에만 관심이 있습니다.

$ ssh-keyscan ssh.gitlab.gnome.org | tee gnome.pub
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHG6b3deoYMPwKEu9Sj+y6MBHYYUKQiAnta/go3aNv7R
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmUnZ33O26kvhcmc6k1T8xlL3yJjeNt3gphvW9/5u/CO0z5G8PGr2km4jUhStuPJR9m77LrdCF5Ywm26hsBnoxK+1zMs7YTjriiGt4r0Q5btQS5J5zFAV6aYJEmCbQz/23n8+w9Jx3hPVS8A3VE9Vd52S+5DMeIQY8QR3LPpROyCIpkR425sN0D0VjRUAH0hn61zS8N1+Pw5te2ULbBriBB9cub2n1GBCsZ2ErX1ernwKffOz/fbi5mpGbGLlJabLBm81/AiNk6NLZWTAZiNZjztxRySZFSpSzGF54kttIePxNC1x9AtW4KMaIzjVK2DIrFONyZYiEX47ox5TXlc7VQaBICUoTrR91wpb5xl2HPKP4MvFqUAzubU2V8r91ISXrnJyfwDrSB7L9Jwg6B6pN+acIttC4gOFGTJg9qanmLxtonSpwv/NaLehI1+D4LR9Or+e8jjtKSc6vu8+ghqAni3XHoT9uSmt1UPd89dOhqbpk8Hc3KTubUC3WIjGnotE=
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH8NuGQ3ArFGochlv6TKXhMhsgIwG743e93pLkAQTzfgds0g0k6QBimb40zavVjITjytiSaQsf+KncJgUjYd98o=
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
$ <gnome.pub ssh-keygen -lf -
3072 SHA256:WRRpoWo7szMzwlkYFeLoj0UItmVHfAI+r+hFgzwGARg ssh.gitlab.gnome.org (RSA)
256 SHA256:TiA9po6nO6jFso7wQNy4xLlth10lIfjv1dxuDabVIqw ssh.gitlab.gnome.org (ECDSA)
256 SHA256:Y9G4dWiIfi53LR3InJWsIbv4lekUHonq/HrqTTm/rcw ssh.gitlab.gnome.org (ED25519)

이 두 가지 형식을 어떻게 조화시킬 수 있나요? 이상적으로는 일부 플래그 ssh-*나 기타 명령을 전달하고 싶습니다 .

다음 명령은 정답을 제공할 수 있지만 기억/입력하기에는 너무 길고 형식이 잘못되어 허용되지 않습니다. 내 사용 사례는 새 시스템을 설정할 때 .bashrc별칭이 나타나지 않도록 한 번 실행하는 것입니다.

(x="$(<gnome.pub)"; for y in sha1 sha256; do echo "$x" | ssh-keygen -lf - -E "$y"; done) | xargs -d\\n -n1 bash -c "echo \"\$0\"; echo \"\$0\" | sed 's/[^:]\+:\([^ ]\+\).*/\1=/' | base64 -d | xxd -p -c 32"
resolvectl query -t sshfp ssh.gitlab.gnome.org | grep ' IN SSHFP ' | xargs -n1 -d\\n bash -c 'echo "$0"; echo "$0" | cut -d\  -f 6 | xxd -p -r | base64'
grep -v \# gnome.pub | cut -d\  -f2- | xargs -n1 -d\\n bash -c 'ssh-keygen -r ssh.gitlab.gnome.org -f <(echo "$0")'

답변1

perlBase64를 16진수로 변환하려면 다음 예를 사용할 수 있습니다 .

$ ssh-keygen -lf gnome.pub | perl -MMIME::Base64 -lpe 's{SHA256:\K\S+}{unpack("H*", decode_base64($&))}e'
256 SHA256:63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc ssh.gitlab.gnome.org (ED25519)
3072 SHA256:591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118 ssh.gitlab.gnome.org (RSA)
256 SHA256:4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac ssh.gitlab.gnome.org (ECDSA)

ssh-keyscan-D출력을 SSHFP 레코드로 인쇄하는 옵션 도 있습니다 .

$ ssh-keyscan -D ssh.gitlab.gnome.org
; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org IN SSHFP 1 1 9d319c15965b939bc2086cbebca96d8bbb89e9a3
ssh.gitlab.gnome.org IN SSHFP 1 2 591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118
; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org IN SSHFP 3 1 17b29179778339d7c91cb2c281b7afa2798c61d5
ssh.gitlab.gnome.org IN SSHFP 3 2 4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac
; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org IN SSHFP 4 1 457e9cb0d575697e27fe8b2185580df5d45ce46b
ssh.gitlab.gnome.org IN SSHFP 4 2 63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc
; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0

ssh-keygen -r특정 공개 키에 대한 SSHFP 레코드를 제공할 수 있으므로 다음을 수행할 수도 있습니다 .

$ perl -ne '
  if (/^\s*+([^#]\S*)\s+(.*)/) {
    open K, "|-", qw(ssh-keygen -f /dev/stdin -r), $1;
    print K $2;
    close K;
  }' gnome.pub
ssh.gitlab.gnome.org IN SSHFP 4 1 457e9cb0d575697e27fe8b2185580df5d45ce46b
ssh.gitlab.gnome.org IN SSHFP 4 2 63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc
ssh.gitlab.gnome.org IN SSHFP 1 1 9d319c15965b939bc2086cbebca96d8bbb89e9a3
ssh.gitlab.gnome.org IN SSHFP 1 2 591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118
ssh.gitlab.gnome.org IN SSHFP 3 1 17b29179778339d7c91cb2c281b7afa2798c61d5
ssh.gitlab.gnome.org IN SSHFP 3 2 4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac

관련 정보