添加了Cygwin ssh密钥,但Git权限被拒绝(publickey)

时间:2016-02-18 12:56:15

标签: git ssh cygwin ssh-agent

尝试将Git与Cygwin一起使用时遇到问题。 我已经为GitLab服务器生成并添加了ssh密钥,一切都可以通过MINGW64(克隆,拉动等)工作得很好,但我想使用Cygwin并发现它不起作用。

虽然我已将生成的密钥的副本放到〜/ user / .ssh文件夹并手动添加密钥,但“ssh-add -l”会将其打印在列表中,但是当我尝试获取存储库时(或者任何其他服务器命令)我得到:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

它看起来像一个错误,但可能我做错了什么。 有没有人遇到这个问题?谢谢。

UPDATE:在Cygwin中更新OpenSSH版本后,问题已经消失。

3 个答案:

答案 0 :(得分:3)

对我而言,原因是我将ssh密钥文件放在C:\Users\username\.ssh(在{cygwin中为/cygdrive/c/Users/username/.ssh),但实际上,您需要将ssh密钥放在~/.ssh中使它工作。它们是两个不同的目录。

在cygwin中运行以下命令解决了我的问题。

cp /cygdrive/c/Users/username/.ssh/* ~/.ssh/

请注意,您应将username替换为实际值。

答案 1 :(得分:1)

代理不必仅运行,但您的工具必​​须知道代理监听的位置。它存储在变量$SSH_AUTH_SOCK中,如果它适用于一个终端,则不需要来自第二个终端。

如果要在NetBeans中使用它,则需要将此变量注入NetBeans环境变量(但不确定如何执行此操作,以便将其从Windows环境传递到NetBeans中的Cygwin终端)。 / p>

或者稍后将其注入运行终端(可能使用.bashrc或其他启动脚本)。简单的测试用例是MinGW终端中的echo $SSH_AUTH_SOCK,然后将export SSH_AUTH_SOCK=/the/path/you/got/from/previous/command写入Cygwin终端。

稍后您可以通过将变量存储到某个文件中来自动化它,您可以在Cygwin中读取该文件。

# MinGW scriplet 
echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> ~/agent_env

# Cygwin scriplet
. ~/agent_env

然后你应该可以使用cygwin shell中的mingw代理。

答案 2 :(得分:0)

如果您为git SSH密钥对使用了非默认文件路径, 您必须配置SSH客户端以找到git私有SSH密钥 用于连接到GitLab。

您需要运行以下命令进行修复:

eval $(ssh-agent -s)
ssh-add ~/.ssh/other_id_rsa