我有三个 SSH 密钥对,可以通过 找到ssh-add -L
;远程服务器接受两个密钥,但只有一个密钥可用于 GitHub,我想通过代理转发克隆 GitHub 存储库(托管限制阻止部署密钥发挥作用)。
- 以下无法登录 GitHub,我发现 SSH 可能使用
id_rsa
通过 列出的第一个密钥 [ ]ssh-add -L
,忽略了我的-i
命令,因此只有在删除密钥后代理转发才有效id_rsa
:ssh -A -tt -i ~/.ssh/id_rsa_github user@ip 'ssh -T [email protected]'
- 我尝试过添加
IdentityFile
和IdentitiesOnly
,~/.ssh/config
但也没有成功
这是正常行为吗?我该如何强制 SSH 使用特定密钥?
答案1
我认为这是正常的。代理已经知道一些密钥。然后-i
是 的一个选项ssh
,它不会直接影响代理。当被问到时,ssh
可以向代理添加密钥,但没有直接的方法可以删除密钥或更改其顺序。此外,代理旨在为许多客户提供服务。其中一些可能需要您想要从此特定ssh
连接“隐藏”的密钥。您需要一种略有不同的方法。
运行本地ssh
作为投入的代理,然后让ssh
所需的密钥添加到代理。这样,密钥将是相关代理唯一知道的密钥。使用通用代理(如果有)的进程将不受影响。
ssh-agent ssh -A -tt -o AddKeysToAgent=yes -i ~/.ssh/id_rsa_github user@ip 'ssh -T [email protected]'
command [arg ...]
如果给出了命令(和可选参数),则该命令将作为代理的子进程执行。当命令行上给出的命令终止时,代理将自动退出。[…]
[…] 代理启动一个命令,根据该命令导出其环境变量 […]
[…]
[…]
ssh(1)
查看这些环境变量并使用它们建立与代理的连接。代理最初没有任何私钥。使用
ssh-add(1)
或通过ssh(1)
设置来AddKeysToAgent
添加密钥ssh_config(5)
。[…]
-o option
可用于以配置文件中使用的格式提供选项。
AddKeysToAgent
指定是否应将密钥自动添加到正在运行的ssh-agent(1)
。如果将此选项设置为yes
,并且密钥是从文件加载的,则密钥及其密码将以默认生存期添加到代理,就像 一样ssh-add(1)
。