如何ssh-agent
了解应该为哪个远程服务器使用哪个密钥?
我遇到过以某种方式涉及该主题的不同问题和帖子,但我仍然不清楚。
我发现,如果您想使用不同的 ssh 密钥,您需要使用-i
选项并指定所需密钥的路径,或者您可以设置身份文件,指定哪个主机要使用哪个密钥对。
但这是否意味着默认情况下ssh-agent
只能使用一对密钥,并且会尝试将其用于所有远程服务器?
答案1
但这是否意味着默认情况下
ssh-agent
只能使用一对密钥,并且会尝试将其用于所有远程服务器?
默认情况下,ssh-agent
将使用添加到其中的所有密钥来连接所有服务器。您可以像ssh_config
其他答案中一样限制密钥。
密钥有指纹,但在公钥认证的第一阶段,仅根据服务器列表验证公共部分,如果不匹配,则跳过认证(通常转为其他密钥或密码认证)。
答案2
SSH 支持~/.ssh/config
文件允许你为不同的主机指定不同的密钥。因此你可以
Host github.com
IdentityFile ~/.ssh/github.key
Host example.com
IdentityFile ~/.ssh/example.key
有一个 这里有关于此功能的好教程。
答案3
“密钥”(没有双关语的意思)基于指纹,具体如下:RFC4716. 正如 ssh 的手册页中解释的那样:
When connecting to a server for the first time, a fingerprint of the
server's public key is presented to the user (unless the option
StrictHostKeyChecking has been disabled). Fingerprints can be determined
using ssh-keygen(1):
$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
If the fingerprint is already known, it can be matched and the key can be
accepted or rejected.
用 ASCII 码来概括就是指纹识别解释选择/使用哪个密钥:
ssh-keygen yourfingerprint
you ssh --> server (stores your fingerprint)
you ssh --> millions of other servers
you ssh initial server --> server --> Have I seen this fingerprint before?
添加
因为我太早按下回车键,所以指纹存储在:
~/.ssh/known_hosts