SSH连接Ubuntu笔记本操作Git提示Permission denied如何解决
核心根因
你定位到的两个问题直接导致了权限报错:
- 从Windows SSH远程接入Ubuntu时,目标环境的ssh-agent未正常启动,无法提供密钥认证服务
- SSH默认仅自动加载
~/.ssh目录下前缀为id_的私钥,你用于Gitea认证的私钥前缀为git_,未被纳入自动加载范围
另外需要注意:你SSH登录到Ubuntu后执行Git操作,使用的是Ubuntu本地的SSH认证环境,和你PC本身的SSH密钥无关,因此之前把PC密钥添加到Git授权列表的操作无法解决问题。
永久解决方案
推荐优先用第一种方案,无需依赖ssh-agent,稳定性最高:
方案1:配置SSH配置文件指定Gitea专属密钥
直接在Ubuntu的当前用户目录下编辑SSH配置文件,强制访问Gitea时使用指定的私钥:
- 打开配置文件:
nano ~/.ssh/config - 添加如下配置(替换占位符为你实际的信息):
Host 你公司Gitea的实际域名 # 例如gitea.company.com HostName 你公司Gitea的实际域名 User git # Gitea SSH操作默认统一使用git用户,无需修改 IdentityFile ~/.ssh/git_xxx # 替换为你实际的git前缀私钥完整路径 IdentitiesOnly yes
- 保存退出后,给配置文件设置正确权限:
chmod 600 ~/.ssh/config
该配置对本地终端、远程SSH终端均生效,Git操作、pipenv拉取Git依赖时都会自动匹配使用指定密钥,无需额外操作。
方案2:配置ssh-agent自动启动+加载自定义前缀密钥
如果需要使用ssh-agent统一管理密钥,可按如下配置:
- 编辑Ubuntu当前用户的shell配置文件(使用bash则改
~/.bashrc,使用zsh则改~/.zshrc) - 加入如下代码:
# 自动启动ssh-agent并加载git前缀密钥 if [ -z "$SSH_AUTH_SOCK" ]; then eval $(ssh-agent -s) # 自动加载所有git_前缀的私钥,可指定具体文件名 ssh-add ~/.ssh/git_* 2>/dev/null fi
- 保存退出后执行
source ~/.bashrc(或对应zsh配置文件)立即生效
如果你的私钥设置了密码,不想每次登录都输入,可使用keychain工具实现密码一次输入长期有效:
- 安装keychain:
sudo apt update && sudo apt install -y keychain - 把上面shell配置文件里的代码替换为:
# keychain管理SSH密钥 /usr/bin/keychain --quiet ~/.ssh/git_xxx # 替换为你的私钥路径 source ~/.keychain/$HOSTNAME-sh
验证方法
配置完成后,在远程SSH终端执行命令测试:ssh -T git@你公司Gitea域名,如果返回Gitea的欢迎提示,说明认证配置成功,此时再执行git pull、pipenv install均可正常运行。
内容的提问来源于stack exchange,提问作者seseikelele
相关产品推荐
相关产品推荐

