我通过Nix安装了Git(在 Arch Linux 上)。
[gorre@uplink ~]$ uname -a
Linux uplink 4.16.9-1-ARCH #1 SMP PREEMPT Thu May 17 02:10:09 UTC 2018 x86_64 GNU/Linux
[gorre@uplink ~]$ nix-env -q
erlang-20.3.2
git-2.16.3
go-1.10.1
google-drive-ocamlfuse-0.6.25
nix-2.0.2
我将SSH配置文件保存在~/.ssh/config
:
[gorre@uplink ~]$ cat ~/.ssh/config
# Bitbucket.org
Host bitbucket.org
#RSAAuthentication yes
IdentityFile ~/.ssh/bitbucket_id_rsa
IdentitiesOnly yes
我100%确定私钥/公钥集是正确的。我一直在SmartGit中使用它,但是当我尝试通过命令行使用Git时,我收到了这个错误:
[gorre@uplink erlang]$ git pull --rebase
sign_and_send_pubkey: signing failed: agent refused operation
git@bitbucket.org: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
有没有办法告诉Git(通过Nix安装)引用我的~/.ssh/config
文件?
作为证据,这就是当我指示" ssh-agent
暂时使用我的公钥(因此您可以确定我拥有正确的权利):
[gorre@uplink erlang]$ ssh-agent sh -c 'ssh-add ~/.ssh/bitbucket_id_rsa; git pull --rebase'
Enter passphrase for /home/gorre/.ssh/bitbucket_id_rsa:
Identity added: /home/gorre/.ssh/bitbucket_id_rsa (/home/gorre/.ssh/bitbucket_id_rsa)
Already up to date.
Current branch master is up to date.
......之后,我可以自由飞一段时间:
[gorre@uplink erlang_simple_cache]$ git pull --rebase
Already up to date.
Current branch master is up to date.
答案 0 :(得分:1)
通常最好将这些调试为ssh失败而不是git失败。使用ssh -v -v git@bitbucket.org
进行诊断。您应该得到相同的错误,并使用更多诊断程序。但我们已经掌握了我们需要的线索,sign_and_send_pubkey: signing failed: agent refused operation
。 Googling this we find it means the ssh-agent
could not access that key
IdentityFile
只说要尝试哪个键,而不是尝试所有键。这个钥匙仍然必须提供。这就是为什么它在您ssh-add
之后工作,这使得密钥可用于您的ssh代理。通过ssh-add
添加密钥是正确的做法。
如果您每次登录时都必须记住添加密钥,这很烦人,那么您可以使用钥匙串安全地存储您的ssh密钥阶段短语。然后,当您下次登录钥匙串时,将使用您的缓存钥匙串为您运行ssh-add
。每个操作系统上的钥匙串都不同。 Here's instructions for that on ArchLinux