我可以让 SSH ForwardAgent 和 ProxyJump 与 Git 一起工作吗?
Posted
技术标签:
【中文标题】我可以让 SSH ForwardAgent 和 ProxyJump 与 Git 一起工作吗?【英文标题】:Can I make SSH ForwardAgent and ProxyJump work with Git? 【发布时间】:2021-12-03 14:16:32 【问题描述】:我有两台电脑;我的工作站和一台笔记本电脑用来运行我的公司 ***。我需要通过 *** 才能访问我的 Git 远程 (BitBucket)。
我的工作站上运行了一个 SSH 代理,其中包含连接到 Git 远程所需的 SSH 密钥。我已将 SSH 配置为在连接到笔记本电脑时转发我的 SSH 代理:
Host my-laptop
ForwardAgent yes
如果我使用 SSH 连接到我的笔记本电脑,我可以成功git pull
,并且ssh-agent -l
确认 SSH 代理已正确转发。到目前为止一切顺利!
挑战如下:我想直接从我的工作站使用 git。这应该可能是通过我的笔记本电脑将 SSH 配置为代理。我的 git 遥控器看起来像这样:
➜ git remote -v
origin ssh://git@bitbucket.my-company.com:7999/my-team/my-project.git (fetch)
origin ssh://git@bitbucket.my-company.com:7999/my-team/my-project.git (push)
所以我添加了这个 SSH 配置:
Host *.my-company.com
ProxyJump my-laptop
代理跳转成功了,因为现在我到达了 Git 遥控器! ????
但是,身份验证失败:
git@bitbucket.my-company.com:权限被拒绝(公钥)。 致命:无法从远程存储库读取。
请确保您拥有正确的访问权限 并且存储库存在。 退出状态 128
所以在代理命令时显然 SSH 代理转发不起作用..?
我尝试过的故障排除步骤:
使用 SSH 连接到笔记本电脑并运行 git pull
- 它可以工作
直接在笔记本电脑上运行git pull
- 它可以工作
添加IdentityFile
和IdentitiesOnly
以强制使用正确的键,没有任何区别:
Host *.my-company.com
ProxyJump my-laptop
IdentityFile ~/.ssh/hubro@my-company.com.key
IdentitiesOnly yes
在连接Git远程主机时添加ForwardAgent yes
,并没有什么区别:
Host *.my-company.com
ProxyJump my-laptop
ForwardAgent yes
IdentityFile ~/.ssh/hubro@my-company.com.key
IdentitiesOnly yes
那么为什么在运行 git 命令时不使用我的本地 SSH 代理?
【问题讨论】:
似乎使用此 ProxyJump 配置不执行代理转发,因为您运行的是ssh user@host.my-company.com
,而不是 ssh user@my-laptop
。告诉 ssh 在其他配置中或使用 -A
进行代理转发可能会让您继续(我自己没有尝试过)。但是,另请参阅unixetc.co.uk/2017/11/13/ssh-proxying-and-agent-forwarding - 或“tl;dr”警告,当使用代理转发时,您将密钥提供给中间系统上的任何超级用户。 (这里可能不是太大的问题。)
@torek 这很有道理,但我试过了,不幸的是它没有任何作用
在这种情况下,无论如何,请查看链接 - 它为您提供了一种不同的处理方式。
请尝试ssh -vvv git@bitbucket.my-company.com -p7999
并显示结果,也许您有太多可能的键
@jeb 确认!我用 ssh-ed25519 类型的 SSH 密钥 (ssh-keygen -t ed25519
) 替换了我的 SSH 密钥,现在它可以工作了!一直以来的问题是我的系统太新了????
【参考方案1】:
事实证明,在这个设置中我什至不需要 SSH 代理转发,因为 ProxyJump 设置设置了一个隧道,让我的工作站可以“直接”与 git 远程通信。
我收到“Permission denied (publickey)”错误的原因是我的发行版 (Arch) 是最新的,并且默认情况下已经禁用了对“ssh-rsa”密钥的支持。 (在撰写本文时,Arch linux 附带 openssh 8.8p1)
令人沮丧的是,我用“rsa-sha2-512”生成我的密钥并不重要,这应该是安全的,我的 SSH 客户端仍然没有它。
但是,我改用 ed25519 生成了一个新密钥,这解决了我的问题。
$ ssh-keygen -t ed25519
【讨论】:
【参考方案2】:在您的情况下,您不需要代理转发,因为您不想将密钥转发到 bitbucket.my-company.com 服务器,您只想在那里进行身份验证。
转发中间代理拥有的密钥不能使用ForwardAgent
。
您需要工作站上的正确密钥,但该密钥似乎只存在于您的笔记本电脑上 (Running git pull directly from the laptop - it works
)。
-
您可以将私钥从笔记本电脑复制到工作站
您可以将密钥从笔记本电脑转发到一个终端中的工作站,然后在另一个终端中将该密钥与 git 一起使用
【讨论】:
我的工作站上肯定也有钥匙。它已加载到我的本地 SSH 代理中。如果我 SSH 到我的笔记本电脑启用 ForwardAgent,我可以从 git 远程成功地git pull
。如果我使用 ForwardAgent disabled (ssh -o ForwardAgent=no ...
) SSH 到我的笔记本电脑,那么 git pull
会失败。
@Hubro 但是你写道,如果你直接从你的笔记本电脑上使用它,而你的工作站没有 ForwardAgent,它也可以工作
抱歉,当我说“直接从笔记本电脑”时,我的意思是物理上在笔记本电脑上,而不是通过 SSH。我在笔记本电脑上有一个 SSH 代理,添加了相同的 SSH 密钥。当我直接在笔记本电脑上打开终端时,会使用本地 SSH 代理。当我在禁用 SSH 代理转发的情况下通过 SSH 连接到笔记本电脑时,没有使用 SSH 代理并且git pull
失败。我不确定为什么会这样。
@Hubro 在笔记本电脑和工作站的代理中存储了多少密钥?你也可以试试ssh -o IdentitiesOnly=yes git@bitbucket.my-company.com -p7999
以上是关于我可以让 SSH ForwardAgent 和 ProxyJump 与 Git 一起工作吗?的主要内容,如果未能解决你的问题,请参考以下文章