skr*_*ryl 18 ssh git deployment ssh-agent
是否可以使用 .ssh/config 中的 IdentityFile 指令指定转发的密钥?
我在我们的生产服务器上尝试通过 Capistrano/GIT 部署一些代码时遇到了这个怪癖。我的个人和我的工作 GIT 密钥总是加载在我的 SSH 代理中,而且碰巧我的个人密钥首先添加到代理中。我在使用 Capistrano 部署时使用代理转发,因此当主机尝试对 `git pull` 操作进行身份验证时,它失败并出现以下错误:
错误:对“您的用户”的“某些回购”的权限被拒绝。
因为它在尝试适当的密钥(稍后在 ssh 代理中提供)之前尝试使用我的个人 git 密钥进行身份验证,并假设我正在访问一个我无权访问的外部存储库。我可以让我的个人用户访问每个工作仓库,但在我的本地机器上,我可以通过在 .ssh/config 中定义自定义域来解决这个问题,如下所示:
主机个人.github.com主机
名github.com
用户git
IdentityFile ~/.ssh/some_key
主机work.github.com
主机名github.com
用户git
IdentityFile ~/.ssh/some_other_key
这样 git 永远不会混淆。是否可以为我的生产设备上的转发密钥创建 .ssh/config 规则,以便他们在拉入新代码时始终知道使用哪个密钥?基本上我希望能够做到:
主机work.github.com
主机名github.com
用户git
IdentityFile some_forwarded_key
谢谢!
Chr*_*sen 26
您可以使用密钥的公共部分来指定要从转发代理使用的私有密钥。这需要在任何“中间”机器(您将本地ssh-agent转发到的机器)上创建一个额外的文件(密钥的公共部分)。
安排中间机器在方便的位置(例如~/.ssh/some_other_key.pub
)拥有所需密钥的公共部分的副本。
从任何已经拥有密钥的公共部分的机器上:
scp some_other_key.pub intermediate:.ssh/
Run Code Online (Sandbox Code Playgroud)
或者,在中间机器上:
ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
Run Code Online (Sandbox Code Playgroud)
您可能希望编辑公钥的尾随“注释”部分以更好地识别密钥的来源/所有者/用途(或尝试隐藏它们)。
使用路径与上述公钥文件-i
或IdentityFile
。
您可能还需要使用IdentitiesOnly yes
(in.ssh/config
或-o
) 来防止ssh尝试从您的转发代理提供任何其他身份。
归档时间: |
|
查看次数: |
6633 次 |
最近记录: |