git - 我可以让 SSH ForwardAgent 和 ProxyJump 与 Git 一起工作吗?
问题描述
我有两台电脑;我的工作站和一台笔记本电脑用来运行我的公司 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 代理呢?
解决方案
事实证明,在这个设置中我什至不需要 SSH 代理转发,因为 ProxyJump 设置设置了一个隧道,让我的工作站“直接”与 git 远程通信。
我收到“Permission denied (publickey)”错误的原因是我的发行版(Arch)是最新的,并且默认情况下已经禁用了对“ssh-rsa”密钥的支持。(在撰写本文时,Arch linux 附带 openssh 8.8p1)
令人沮丧的是,我用“rsa-sha2-512”生成我的密钥并不重要,这应该是安全的,我的 SSH 客户端仍然没有它。
但是,我使用 ed25519 生成了一个新密钥,这解决了我的问题。
$ ssh-keygen -t ed25519
推荐阅读
- c# - C# 比较两个包含小写文本的 byte[] 数组
- android - Android:从 Firebase 实时数据库的主线程中同步获取数据
- python - 计算给定列的排列出现次数
- react-native - 如何将平移响应器仅移动到顶部和左侧方向
- amazon-web-services - 如果 S3 存储桶未接收数据,CloudWatch 警报
- android - 测试 Google Play Install Referrer API 或示例
- php - PHP 7.2 本机支持连接到 MSSQL
- javascript - 最好使用 Lodash 通过查找表对值进行排序
- javascript - 如何在香草js中点击x次后禁用输入?
- wpf-mediakit - WPFMediaKit HDMI 采集卡没有声音