ssh-keygen -lf ssh_host_rsa_key.pub
给出:
2048 SHA256:nVDFXqK06A4dwQYjBR3MHglFllTCjSHVNgYcCeRCNaQ root@tianhe-windy (RSA)
然后我尝试自己计算sha256
指纹。
cat ssh_host_rsa_key.pub
给出:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Ukz/o8b2L4fYyACOJOnFh8KOE/DypW9Dt3s8gZqKTb3W2BPmghLZyFeMQAjpVLJ/z414ydvb67AE9nyOQq1oMRbAyjbu97ocJ4UHXM6UO0wSRUF/fwtxfPju2p2hbVN7PqCV5+3cDUEIR1mVM8j6sdT7YbMTsZJab9gDlLD76ZKLCYLR1GSHNbxDp4DpMAkJsoS8F6ee+OwV6SiDvI3N6XDwrAASLNy09s2eid3H1YUSq276J5TLsZiKMPDgs7O3Tw2uMPkdzTdWSYJ/w0hyVO5YZW44JzSxg3PubV08eHPQWi17RwT7fa+QPvRw87YnACzFusZHOxQDxzQfCohH root@tianhe-windy
我将base64编码的公钥从 A
复制到 H
,没有whitespaces。
然后我做:
import hashlib
import base64
b64pubkey = 'AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Ukz/o8b2L4fYyACOJOnFh8KOE/DypW9Dt3s8gZqKTb3W2BPmghLZyFeMQAjpVLJ/z414ydvb67AE9nyOQq1oMRbAyjbu97ocJ4UHXM6UO0wSRUF/fwtxfPju2p2hbVN7PqCV5+3cDUEIR1mVM8j6sdT7YbMTsZJab9gDlLD76ZKLCYLR1GSHNbxDp4DpMAkJsoS8F6ee+OwV6SiDvI3N6XDwrAASLNy09s2eid3H1YUSq276J5TLsZiKMPDgs7O3Tw2uMPkdzTdWSYJ/w0hyVO5YZW44JzSxg3PubV08eHPQWi17RwT7fa+QPvRw87YnACzFusZHOxQDxzQfCohH'
sha256 = hashlib.sha256()
sha256.update(base64.b64decode(b64pubkey))
b64fingerprint = base64.b64encode(sha256.digest())
print(b64fingerprint)
并获得
nVDFXqK06A4dwQYjBR3MHglFllTCjSHVNgYcCeRCNaQ=
与 ssh-keygen
caCAIL的一个:
nVDFXqK06A4dwQYjBR3MHglFllTCjSHVNgYcCeRCNaQ
计算ssh_host_ecdsa_key.pub
时,我也会获得额外的=
。
我做错了什么?
没有错,只是SSH通过惯例省略了任何尾随的填充。您也可以自己删除任何尾随的=
签名;他们没有编码任何数据。
Python base64
例程实现了标准base64算法,该算法指定以返回四个字符的编码数据中的一个甚至多个。我相信,起源来自电子邮件的MIME标准。