如何理解 ssh-keygen 和 ssh-copy-id?

cdh*_*hit 3 ssh ssh-keygen

据我所知,机器(A)ssh-keygen生成一个密钥,并将ssh-copy-id这个密钥交给另一台机器(B),是吗?

但是当这完成后,要测试这是否完成是使用ssh,如:root@A:ssh root@B 如果在没有密码的情况下登录B,那么这有效。

我对此感到困惑。A给B一把钥匙,为什么A不用密码就可以登录B?它应该是这样的,在B上登录,Bssh A没有密码。

我的理解有误吗?

cas*_*cas 5

ssh 密钥有两部分,私有部分和公共部分。这就是为什么它通常被称为“密钥对”,一对一起工作的密钥。

ssh-copy-id将私钥/公钥对的 PUBLIC 部分复制到~/.ssh/authorized_keys远程主机上。

任何拥有私钥(并且知道密码)的人都可以在没有密码的情况下登录到该远程主机。

为了避免一直重新输入密码,您可以使用类似ssh-agent为您保存私钥的程序(简单来说,它会在您使用密码解锁后缓存私钥)。它将保留私钥,直到您告诉它不要这样做,或者您杀死代理或注销。见man ssh-agent

密钥对的 PUBLIC 部分不是特别敏感,安全方面。它可以无风险地分发和披露。如果没有匹配的私钥(以及私钥的密码),它几乎没有用处。

当然,密钥对的 PRIVATE 部分应该保密。


Gil*_*il' 5

您缺少的是,ssh-copy-id它不仅将公钥复制到 B:它还将公钥添加到允许访问帐户 ( ~/.ssh/authorized_keys)的密钥列表中。运行后ssh-copy-id,密钥不仅存储在 B 上的某个地方,而且在 B 上注册为授权登录方法。

私钥在 A 上,需要传递给 SSH 客户端(这可以通过让它 search ~/.ssh/id_*、传递-i命令行选项、使用IdentityFilein~/.ssh/config或 via 来完成ssh-agent)。公钥在~/.ssh/authorized_keysB 上。当你从 A 登录 B 时,SSH 客户端向 B 发送一个拥有私钥的证明;B 将此拥有证明与在 中找到的公钥相关联,~/.ssh/authorized_keys以便授权登录尝试。