使用 AgentForwarding 时在 ssh_config 中使用 IdentityFile 指令

使用 AgentForwarding 时在 ssh_config 中使用 IdentityFile 指令

是否可以使用 .ssh/config 中的 IdentityFile 指令指定转发密钥?

当我尝试通过 Capistrano/GIT 在我们的生产服务器上部署一些代码时,我遇到了这个怪癖。我的个人和工作 GIT 密钥始终加载在我的 SSH 代理中,碰巧我的个人密钥首先添加到代理中。使用 Capistrano 部署时,我使用代理转发,因此当主机尝试验证“git pull”操作时,它失败并出现以下错误:

错误:‘您的用户’拒绝授予‘某些 repo’ 权限。

因为它在尝试使用适当的密钥(稍后在 ssh 代理中出现)之前尝试使用我的个人 git 密钥进行身份验证,并假定我正在访问一个我没有权限访问的外部存储库。我可能只授予我的个人用户访问每个工作存储库的权限,但在本地计算机上,我可以通过像这样在 .ssh/config 中定义自定义域来解决这个问题:

主持人personal.github.com
主机名github.com
用户git
身份文件〜/ .ssh / some_key

主持人work.github.com
主机名github.com
用户git
身份文件〜/ .ssh / some_other_key

这样 git 就不会感到困惑了。是否可以在我的生产机器上为转发密钥创建 .ssh/config 规则,以便它们始终知道在提取新代码时要使用哪个密钥?基本上我希望能够做到:

主持人work.github.com
主机名github.com
用户git
身份文件某个转发的密钥

谢谢!

答案1

您可以使用密钥的公共部分来指定要从转发代理中使用的私钥。这需要在任何“中间”机器(您将本地密钥转发到的机器)上创建一个额外的文件(密钥的公共部分)。ssh 代理)。

  1. 安排中间机器在方便的位置(例如~/.ssh/some_other_key.pub)保存所需密钥的公共部分的副本。

    从任何已经拥有密钥公共部分的机器上:

    scp some_other_key.pub intermediate:.ssh/
    

    或者,在中间机器上:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    您可能需要编辑公钥的尾部“注释”部分,以更好地识别密钥的来源/所有者/用途(或尝试隐藏相同内容)。

  2. -i使用或来使用上述公钥文件的路径名IdentityFile

  3. 您可能还需要使用IdentitiesOnly yes(in.ssh/config-o)来保持远程控制尝试提供您转发的代理的任何其他身份。

相关内容