ssh中使用公钥/私钥和证书登录之间的区别

ssh中使用公钥/私钥和证书登录之间的区别

我试图确定我用来建立 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)安装的,则您依赖于这些协议的安全性。证书有所不同,如下所示:

https://ef.gy/hardening-ssh

相关内容