我在 ~/.ssh/config 文件中为它们配置了不同的主机和密钥。但是,为了管理不同密钥的密码,我通过 ssh-add 命令向 ssh-agent 添加密钥来寻求帮助。现在,当我 ssh 主机时,代理会一一提供它拥有的所有密钥。
我搜索了如何限制 ssh-agent 的这种行为,并使用
IdentitiesOnly yes
在所有主机的配置文件中。
通过这样做,我成功地限制了 ssh-agent 提供其拥有的密钥,但是 ssh-agent 不再管理密码短语,我每次 ssh 时都必须输入密码短语。
有没有办法只渲染我正在 ssh 的特定主机的密钥(从 ~/.ssh/config 文件中读取)并管理密码?
答案1
该问题可以通过执行以下操作来解决:
编辑客户端的
~/.ssh/config
文件,使主机条目具有以下内容:Host fooName Hostname foo.name.tld User usrname IdentityFile ~/.ssh/fooName.pub IdentitiesOnly yes
请注意,该
IdentityFile
指令指的是民众密钥而不是私钥文件。使用 向 ssh-agent 添加相关私钥
ssh-add
。此时系统应该提示您输入密码。
答案2
您可以指定一个民众密钥通过IdentityFile
,如果私钥被加载,ssh-agent
它将被使用。否则,它将被视为私钥,并可能生成有关不受保护的私钥文件的错误。
- 确保
ssh-agent
正在运行 - 将您的身份添加到代理中
ssh-add ~/.ssh/id_rsa
- 如果出现提示,请响应密码质询
- 添加您的身份民众的关键
~/ssh/config
,例如:
Host *
IdentityFile ~/.ssh/id_rsa.pub # Public key, SSH will consult ssh-agent
IdentitiesOnly yes
你为什么想做这个?
加密私钥是最佳实践,但每次使用密钥时都必须响应密码质询,这很不方便。ssh-agent
提供了一种缓存解密密钥的方法,因此您只需偶尔响应密码质询即可解密它们。
但这会产生一个新问题:某些主机限制在关闭连接之前它们可以容忍的身份验证错误数量。如果您ssh-agent
有很多密钥,那么您可能会遇到此问题,表现为“身份验证错误太多”。
为了避免这种情况,您可以指定IdentityFile
给定主机,并且仅使用该身份。这巧妙地避免了“太多身份验证错误”,但现在每次使用密钥时都必须响应密码质询,本质上绕过了ssh-agent
方便的缓存机制!
如果您知道 中存在身份(私钥)ssh-agent
,则可以ssh
通过指定来使用它民众密钥的一部分,足以找到您所引用的私钥,而无需直接访问它。
您可以使用私钥添加/修改/删除密码ssh-keygen -p
。
关于ssh-agent
ssh-agent
永远不会向任何进程提供解密的密钥。相反,将ssh
其收到的加密质询发送至ssh-agent
,然后返回质询响应。这可以保证您的私钥安全,但也允许ssh-agent
进行隧道传输,因此远程系统可以访问您的身份(只要您保持连接)。参见man ssh_config
和ForwardAgent
。
故障排除
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/meermanr/.ssh/id_rsa.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/meermanr/.ssh/id_rsa.pub": bad permissions
这意味着ssh-agent
没有运行,或者没有加载关联的标识。检查加载了哪些身份ssh-add -l
,例如:
# ssh-add -l
The agent has no identities
加载私人的身份密钥ssh-add ~/.ssh/id_rsa
:
# ssh-add /Users/meermanr/.ssh/id_rsa
Enter passphrase for /Users/meermanr/.ssh/id_rsa
Identity added: /Users/meermanr/.ssh/id_rsa (/Users/meermanr/.ssh/id_rsa)
查看:
# ssh-add -l
4096 SHA256:2Mn+jr5imURFStSWVaDHXhhx+6cyXXBoNjOfPLy2thQ /Users/meermanr/.ssh/id_rsa (RSA)
再试一次。