我也分享一下我的经验
我试图从 Gerrit 存储库中克隆一些项目,在那里我在帐户设置中获取了我的公钥。
在第一次尝试时,git clone
我收到以下错误:
Unable to negotiate with XX.XX.XX.XX port XXX: no matching key exchange
method found. Their offer: diffie-hellman-group1-sha1
我发现我需要以-oKexAlgorithms=+diffie-hellman-group1-sha1
某种方式将 SSH 选项传递给git clone
.
希望GIT_SSH_COMMAND
环境变量完成了这项工作:
export GIT_SSH_COMMAND="ssh -oKexAlgorithms=+diffie-hellman-group1-sha1"
但git clone
仍然没有开始工作..现在它抛出了(关于主题):
Permission denied (publickey).
我已经有了 SSH 密钥,不想重新生成它们。我检查了与主机的普通 SSH 连接,一切正常:
**** Welcome to Gerrit Code Review ****
Hi XXXXX, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:
git clone ssh://xxxxx@xx.xx.xx:xxx/REPOSITORY_NAME.git
我有点困惑。-vvv
我重新开始并通过选项打开了 SSH 的调试。我看到了以下内容:
debug1: read_passphrase: can't open /dev/tty: No such device or address
可能,这是GIT_SSH_COMMAND
env 变量的开销——我的密钥是用密码保护的(我在检查 git repo 主机的登录时输入了它)。
所以,我决定去掉那个短语。一个简单的命令帮助了我:
ssh-keygen -p
然后我为“旧密码”输入了我的密码,然后在“新密码”上点击了ENTER两次以将其留空,即根本没有密码并确认我的选择。
之后,我在本地磁盘上获得了新克隆的 repo。