当我尝试从远程计算机连接到家庭计算机时,如何验证新连接主机的指纹。首次连接时,我得到了以下信息:
[email protected]$ ssh [email protected]:~/
The authenticity of host '[home-machine.org]:222 ([x.xx.xx.xx]:222)' can't be established.
ECDSA key fingerprint is SHA256:6lr/VtTwgrKZVNZQ8y8Le/ilfBYfo0e+9UliSg+AD2k.
Are you sure you want to continue connecting (yes/no)?
我如何检查我的“家用机器”的指纹?我试图像这样在我的家用机器上列出它们:
[email protected]:~$ for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file}; done
1024 d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49 /etc/ssh/ssh_host_dsa_key.pub (DSA)
256 d9:25:51:16:ca:76:bd:8f:b8:6a:79:a2:1c:81:4b:4c /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
2048 3a:c6:2d:29:7c:b9:16:e8:ed:1c:a8:26:5d:ab:0d:1e /etc/ssh/ssh_host_rsa_key.pub (RSA)
[email protected]:~$
但这些密钥的格式似乎不同。这是指纹的某种 MD5 吗?我怎样才能让这些指纹具有统一的格式?
答案1
您的 SSH 服务器提供 SHA256 公钥哈希,它比 MD5 哈希安全得多。
然后,您必须向 ssh-keygen 指定您想要 SHA256 而不是 MD5 哈希值。尝试在您的家用机器(在您的示例中,您尝试从远程机器连接):
for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done
答案2
使用的命令
显示服务器上存储的公共主机密钥的 ascii-art(在服务器端完成,即通过 ssh 连接到的服务器端):
ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
-l:显示指定公钥文件的指纹。
-v:视觉(ascii-art)
-E md5:用于计算指纹的哈希算法(“md5”或“sha256”)。(如果可用,则首选“sha256”)。(在旧版本的 ssh-keygen 中可能不可用)
-F: 文件
显示远程服务器公共主机密钥的 ASCII 码(在客户端完成,即通过 ssh 连接的客户端):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o: 选项
可视化主机键:视觉(ascii-art)
指纹哈希值:要使用的哈希算法(使用与您从服务器获取的算法相同:md5 或 sha256)
检查主机/服务器真实性的步骤
第一,1.要在服务器本地完成(您要通过 ssh 连接到的服务器):它将为您提供第一个 ascii-art。打印它或拍照。
第二,2.是在第一个 SSH 连接时完成的;它将显示第二个 ascii-art。如果 ascii-art 相同,那么你可以回答是的到“我相信吗?”问题(即
Are you sure you want to continue connecting (yes/no)
)。
例子
- 1. 服务器端
$ ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6 (ECDSA)
+--[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+-----------------+
- 2. 客户端
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)?
更多解释
第一个命令将显示与你输入的文件指纹相对应的 ascii-art(以及指纹本身)。你输入的文件是公共的主持人服务器的密钥。当客户端连接时(不仅是第一次连接),服务器将发送其公共主机密钥。将在 中搜索此公共主机密钥~/.ssh/known_hosts
。如果公钥在文件中,则没问题:主机(服务器)是已知的,因此我们继续下一步以验证用户身份(本文未描述用户身份验证)。如果公钥不在文件中,则客户端将使用哈希算法计算此公共主机密钥的指纹(不同的哈希算法将给出不同的指纹)。将显示先前计算出的指纹(如果提供了相应的选项,则还会显示 ascii-art),您必须根据您是否识别出此指纹来回答是或否(此指纹是服务器的公共主机密钥的图像/哈希)。如果您回答是,则服务器的公钥(而不是其指纹)将添加到文件中~/.ssh/known_hosts
。
~/.ssh/known_hosts
我们可以注意到你的主(〜)目录,因为你信任此主机(服务器),但其他用户可能不信任您。此外,服务器的主机公钥不依赖于用户,因此存储在 中/etc/ssh/
。
第二条命令将显示从主机服务器连接(根据选项中给出的哈希算法)。这与仅执行 ssh 相同,但具有更多可视选项,因此连接将以与正常 ssh 连接相同的方式继续。
答案3
服务器
ssh-keygen -l -v -f /etc/ssh/ssh_host_ed25519_key
您可能需要将此与客户端算法以及该目录中的其他文件之一进行匹配。这些文件具有正确的权限,因此它将使用公钥。
例如,你可能需要写
ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key
客户
ssh -o visualhostkey=yes -o FingerprintHash=sha256