当我为用户加载了私钥时,我可以运行ssh-copy-id user@remotehostname
并提示输入密码。当我输入正确的密码后,我现在可以使用密钥登录了。我以前总是将此命令-i <path to public key>
作为参数运行,但现在意识到我不需要公钥的路径。
当我以 user@hostname 身份登录时,我会搜索 .ssh/authorized_keys 文件,并查看与我的私钥匹配的公钥,这让我感到困惑——我从未提供过公钥。
当我运行命令时,ssh-copy-id 如何知道哪个公钥与我在本地加载的私钥匹配?当我不提供授权密钥文件时,它怎么知道要添加什么?
我希望我很清楚——我一直在跑步ssh-copy-id -i <public key>
,这对我来说很有意义——它登录并将公钥复制到授权的密钥文件中。但是如果我不提供公钥(即我ssh-add <private key>
在运行 ssh-copy-id 之前运行),只要我加载了私钥,它仍然可以工作,而且我不明白它是如何获取公钥的。
编辑:澄清一下,我没有保留默认的 id*.pub 命名约定。因此,我在手册页中看到的关于搜索 id*.pub 的逻辑似乎并不适用。事实上,我可以创建一个名为 randompair 的密钥对,加载 randompair,将 rendompair.pub 重命名为 newname.pub,运行 ssh-copy-id,它仍然会加载正确的公钥。
查看 bash 脚本本身让我对它是如何实现这一点感到有些困惑。