根据以下邮政,似乎当您通过 ssh 进入一个框时,默认情况下它会加载所有密钥(公钥和私钥)~/.ssh
以便在我连接的服务器上进行身份验证。
这是真的吗?还是您必须配置~/.ssh/config
文件并将IdentifyFiles映射到服务器?
我试图了解身份验证如何在本地机器上使用多个私钥进行工作。
答案1
我假设您的意思是您想在客户端而不是服务器上使用多个私钥。默认情况下,ssh 客户端会加载:
对于协议版本 1
~/.ssh/identity
对于协议版本 2:
~/.ssh/id_dsa
~/.ssh/id_ecdsa
~/.ssh/id_ed25519
~/.ssh/id_rsa
它将尝试所有这些键(直到第一个成功)。
如果您想添加其他键,您有两个选择:
1. 通过 ~/.ssh/config 添加每个主机选择
你已经提到过这一点,所以我假设你很熟悉它。简而言之,它看起来像这样:
Host host1
HostName host1.example.com
IdentityFile ~/.ssh/id_rsa_host1
Host host2
HostName host2.example.com
IdentityFile ~/.ssh/id_rsa_host2
2. 使用 ssh-agent
配置 ssh-agent(谷歌上有很多文档,例如http://mah.everybody.org/docs/ssh),它是 OpenSSH 默认自带的。您可以通过
ssh-add -i $KEY_FILE
每个私钥。
3. 手动操作
使用 -i 选项启动 ssh 客户端来选择要使用的密钥。
ssh -i $KEY_FILE
我建议使用选项 2(ssh-agent),它还可以为您带来一些好处,但这完全取决于您的情况。
答案2
根据手册:
~/.ssh/identity
~/.ssh/id_dsa
~/.ssh/id_ecdsa
~/.ssh/id_ed25519
~/.ssh/id_rsa
Contains the private key for authentication. These files contain
sensitive data and should be readable by the user but not acces‐
sible by others (read/write/execute). ssh will simply ignore a
private key file if it is accessible by others. It is possible
to specify a passphrase when generating the key which will be
used to encrypt the sensitive part of this file using 3DES.
所以是的,ssh 将加载所有这些密钥。如果您有需要特定密钥才能连接的服务器,您确实应该在 ~/.ssh/config 中配置该主机。
请注意,不需要有多个密钥对。您的公钥是公开的,可以安全地附加到您连接的所有服务器中的 ~/.ssh/authorized_keys 文件中。没有您的私钥,任何人都无法使用它做任何事情。
唯一可能需要为一个服务器使用不同密钥的情况是,如果您无权访问您的 authorized_keys 文件(因为它是 sftp 或 scp 或 rsync 服务器)并且您想要重用您已经配置的密钥对。