You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nix安装的Git遇publickey权限拒绝,如何指定SSH配置文件?

解决Nix安装的Git无法读取~/.ssh/config的问题

你遇到的问题是Nix包管理器安装的Git无法识别用户目录下的SSH配置,导致拉取代码时需要手动通过ssh-agent添加密钥才能正常工作。这主要是因为Nix的软件默认运行在相对隔离的环境中,可能没有正确继承系统的SSH环境变量或者访问用户SSH配置文件的权限。

先回顾你的环境信息:

  • 系统版本:
[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
  • Nix已安装包:
[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
  • 报错信息:
[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.

下面是几个可行的解决方案:

1. 确保SSH目录和文件的权限正确

Nix的Git进程需要能正常读取你的SSH配置和密钥,先检查权限是否符合安全要求:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/bitbucket_id_rsa

错误的权限会导致SSH客户端拒绝读取配置或密钥,这是最容易被忽略的问题之一。

2. 让Nix的Git继承SSH_AGENT环境变量

Nix的沙盒机制可能会隔离环境变量,导致Git无法找到运行中的ssh-agent。你可以通过以下方式传递环境变量:

  • 临时解决:如果你的ssh-agent已经在运行,先导出环境变量再执行Git命令:
export SSH_AUTH_SOCK=$(ls /run/user/$(id -u)/ssh-agent.*)
git pull --rebase
  • 永久解决:把上面的导出命令添加到你的shell配置文件(比如~/.bashrc或~/.zshrc),每次启动shell都会自动设置。

3. 指定Git使用的SSH命令及配置文件

直接告诉Git要使用你的SSH配置文件,通过设置GIT_SSH_COMMAND环境变量:

  • 临时使用:
GIT_SSH_COMMAND="ssh -F ~/.ssh/config" git pull --rebase
  • 永久生效:把这个环境变量写入shell配置文件:
echo 'export GIT_SSH_COMMAND="ssh -F ~/.ssh/config"' >> ~/.bashrc
source ~/.bashrc

这样Nix安装的Git每次运行时都会调用指定配置的SSH客户端,避免读取Nix自带的默认配置路径。

4. 强制Git使用系统SSH客户端

Nix可能自带了独立的ssh客户端,你可以查看Git当前使用的ssh路径:

git config --get core.sshCommand
# 若没有输出,查看Git执行路径下的ssh
ls $(git --exec-path)/ssh

如果是Nix自带的ssh,你可以强制Git使用系统的ssh客户端:

git config --global core.sshCommand "/usr/bin/ssh -F ~/.ssh/config"

系统的ssh客户端能正常读取用户目录下的~/.ssh配置,这样就能解决隔离问题。

尝试上面的方法后,应该就能让Nix安装的Git自动识别你的SSH配置,无需每次手动添加密钥到ssh-agent了。

内容的提问来源于stack exchange,提问作者user4695271

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:04:41