如何从 CLI 远程验证 ssh 主机密钥

如何从 CLI 远程验证 ssh 主机密钥

因此,给出以下假设:

1)我第一次希望通过 ssh 连接到远程主机

2)ssh-keyscan 显示以下内容:

pwaugh$ ssh-keyscan -t ecdsa pi                                      
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4 pi ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEQVybySS0o5UWGHC0Qq1/pkDWZ0gK4nxUDdQEGdxWo3Dl5XMfMr+m6l5GDo7eID23j3N5Gwh7pGyea3WQbRWAk= pwaugh$

3)ssh pi@pi 给我这个:

pwaugh$ ssh pi@pi
The authenticity of host 'pi (192.168.1.12)' can't be established.
ECDSA key fingerprint is SHA256:eMaAlpPMA2/24ajrpHuiL7mCFCJycZNfuNfyB3cyx+U.
Are you sure you want to continue connecting (yes/no)? no
Host key verification failed.
pwaugh$

问题 1:如何确认使用 ssh 从服务器返回的密钥的 SHA256 哈希值与 ssh-keyscan 返回的完整密钥相同?
(除了在终端上 $ sudo ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key)

我猜,如果这是可能的,那么我就会容易受到中间人攻击,除非我最终在终端上验证它,对吗?

我还猜测更好的方法是收集密钥,将它们添加到known_hosts,然后让ssh帮我验证它们。但只是好奇。

问题 2:首次连接并获取确认主机消息/密钥时,默认使用 ecdsa 密钥。这是否比使用 ed25519 密钥更不安全?我可以强制检查该密钥吗?(我猜可能必须删除其他主机密钥)

谢谢大家的想法。我查看了 man 文件,甚至还查看了一本关于 ssh 的书,但还是不清楚这一点。

帕特里克

答案1

其中“pi”是感兴趣的主机,我可以请求密钥,然后将它们通过管道传输到 ssh-kegen,如下所示:

$ ssh-keyscan pi | ssh-keygen -lf -
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
# pi:22 SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u4
256 SHA256:eMaAlpPMA2/24ajrpHuiL7mCFCJycZNfuNfyB3cyx+U pi (ECDSA)
2048 SHA256:P/Da4p1YbLDgnbGIkVE9SykONlVynPkwwap54RMW6+A pi (RSA)
256 SHA256:cpQtotFCbt4TXxa1474whR1Wkk3gOczhumE23s9pbxc pi (ED25519)
$ _

这样我就不必在主机上实际执行此操作:

$ ssh-keygen -lf ./.ssh/known_hosts

帕特里克

相关内容