【发布时间】:2021-12-03 14:16:32
【问题描述】:
我有两台电脑;我的工作站和一台笔记本电脑用来运行我的公司 VPN。我需要通过 VPN 才能访问我的 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 密钥,现在它可以工作了!一直以来的问题是我的系统太新了????