我试图确定我用来建立 ssh 连接的两个过程之间的差异。
在第一个命令序列中,我执行以下操作:
ssh-keygen -t rsa
ssh-copy-id user@ip
ssh user@ip
我相信这对应于服务器的公钥/私钥身份验证。我认为这很容易受到中间人攻击。
其他顺序如下:
ssh-keygen -t rsa
cat /home/login_server/.ssh/id_rsa.pub >> /home/login_server/.ssh/authorized_keys
ssh -i ~/.ssh/id_rsa user@ip -o VisualHostKey=yes
我认为第二个命令本质上是命令 ssh-copy-id 的作用。然而,选项 -i 告诉我在哪里可以找到我以前没有做过的私钥。我可以假设这是上述内容的认证版本吗?
答案1
您使用的两种方法很相似,并且它们使用相同的身份验证机制。具体区别是:
ssh-copy-id user@ip
将复制所有尚未授权到user@ip
目标系统的本地密钥,而您的cat
命令仅复制您刚刚创建的密钥;ssh user@ip
将尝试所有可用的身份验证密钥,而ssh -i ...
只会使用指定的密钥。
MITM 问题与主机密钥有关,而不是您自己的密钥。这就是VisualHostKey
有帮助的地方,因为它更容易比较(对于我们人类来说)。但这与各种身份验证机制无关。
请注意,SSH 现在也支持证书,但它们有所不同:基本上,您不必列出每台服务器上的所有授权密钥,而是将服务器配置为接受由给定证书颁发机构签名的密钥。
答案2
我相信这对应于服务器的公钥/私钥身份验证。
这将执行一项密码身份验证和一项公钥身份验证。
我认为这很容易受到中间人攻击。
如果正确检查主机密钥,它就不易受到 MitM 的攻击。
我认为第二个命令本质上是命令 ssh-copy-id 的作用。
是的,但ssh-copy-id
还会进行其他检查以确保权限和 selinux 上下文正确。它还通过网络并使用password
身份验证来完成此操作。
然而,选项 -i 告诉我在哪里可以找到我以前没有做过的私钥。
是的。但这/home/login_server/.ssh/id_rsa
是默认的。
我可以假设这是上述内容的认证版本吗?
不,这只是复制文件。如果主目录是通过其他方法(NFS、Samba 或其他sshfs
)安装的,则您依赖于这些协议的安全性。证书有所不同,如下所示: