☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您在QClaw终端中执行Git命令(如git push、git pull)时收到“Permission denied (publickey)”错误提示,则说明Git无法通过SSH密钥向远程仓库(如GitHub、GitLab)完成身份认证。以下是解决此问题的步骤:
一、验证SSH密钥是否已生成并存在
QClaw终端需使用有效的RSA或ED25519格式SSH私钥进行认证,若密钥文件缺失或路径错误,将直接导致权限被拒。需确认密钥对是否存在于默认路径且具备正确读取权限。
1、在QClaw终端中运行:ls -al ~/.ssh/id_rsa ~/.ssh/id_rsa.pub,检查RSA密钥是否存在;若使用ED25519,运行:ls -al ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub。
2、若提示“No such file or directory”,则需生成新密钥:运行ssh-keygen -t ed25519 -C "your_email@example.com",全程按回车接受默认路径与空密码(或输入安全口令)。
3、确认私钥文件权限为600:运行chmod 600 ~/.ssh/id_ed25519(或对应私钥文件名)。
二、确保SSH代理已启动并加载密钥
QClaw终端默认可能未启用ssh-agent,或已启动但未加载当前用户密钥,导致Git调用SSH时无法获取可用凭据。
1、启动ssh-agent并注入当前shell环境:运行eval "$(ssh-agent -s)"。
2、将私钥添加至agent:运行ssh-add ~/.ssh/id_ed25519(替换为实际私钥路径)。
3、验证密钥是否已加载:运行ssh-add -l,输出应显示密钥指纹及文件路径。
三、检查远程仓库URL是否为SSH格式
Git操作失败常因远程地址仍为HTTPS协议,而非SSH协议。HTTPS地址不触发SSH密钥校验,但若误配为SSH格式却无密钥支持,或SSH地址拼写错误,均会报权限拒绝。
1、查看当前远程地址:运行git remote get-url origin。
2、若输出为https://github.com/xxx/yyy.git,需切换为SSH格式:运行git remote set-url origin git@github.com:xxx/yyy.git(将github.com替换为目标平台域名,如gitlab.com;xxx/yyy替换为实际用户名与仓库名)。
3、再次执行git remote get-url origin确认已更新为git@开头的SSH URL。
四、测试SSH连接并排查网络层拦截
即使密钥与URL正确,QClaw所在环境的防火墙、代理策略或SSH端口(22)封锁也可能中断连接,表现为超时或直接拒绝。
1、手动测试与Git服务器的SSH连通性:运行ssh -T git@github.com(GitHub)或ssh -T git@gitlab.com(GitLab)。
2、若返回“Hi username! You've successfully authenticated…”,说明SSH链路正常;若返回“Permission denied (publickey)”,需返回步骤一、二复核;若卡住或提示“Connection timed out”,则可能被网络策略阻断。
3、如遇超时,尝试强制使用HTTPS端口443的SSH隧道:编辑~/.ssh/config,新增以下内容(以GitHub为例):Host github.com\n HostName ssh.github.com\n Port 443\n User git。
五、检查QClaw终端用户与SSH配置归属一致性
QClaw可能以非登录用户身份运行终端进程,导致读取的~/.ssh目录实际属于root或其他用户,或SSH配置文件(~/.ssh/config)中指定了错误的IdentityFile路径。
1、确认当前shell用户:运行whoami与echo $HOME,确保二者匹配且$HOME/.ssh存在。
2、检查SSH配置是否覆盖默认行为:运行cat ~/.ssh/config,查找含HostName、User、IdentityFile的段落,确认其中IdentityFile指向的私钥文件真实存在且可读。
3、若存在多组Host配置,确保Git远程URL中的主机名(如github.com)与config中Host字段完全一致(区分大小写与尾部点号)。










