使用Nix的Git时,权限被拒绝(publickey)

时间:2018-05-26 21:25:23

标签: git nix nixpkgs

我通过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.

1 个答案:

答案 0 :(得分:1)

通常最好将这些调试为ssh失败而不是git失败。使用ssh -v -v git@bitbucket.org进行诊断。您应该得到相同的错误,并使用更多诊断程序。但我们已经掌握了我们需要的线索,sign_and_send_pubkey: signing failed: agent refused operationGoogling 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