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

部署Node.js时Git推送远程仓库报publickey权限拒绝问题咨询

问题原因

该报错属于SSH公钥认证失败,和你写的post-receive钩子逻辑无关——当前连接在SSH认证阶段就被服务器拒绝,根本没有进入Git仓库读写、钩子触发的流程。

排查解决步骤
  • 先排查本地公钥是否正确配置到服务器
    本地终端执行对应命令查看公钥内容:如果是RSA密钥执行cat ~/.ssh/id_rsa.pub,如果是ED25519密钥执行cat ~/.ssh/id_ed25519.pub,复制输出的全部公钥文本。
    通过云厂商网页控制台、密码登录等其他可用方式登录目标服务器,按以下步骤操作:
    1. 切换到ubuntu用户家目录:cd /home/ubuntu
    2. 不存在.ssh目录则新建,并设置正确目录权限:mkdir -p .ssh && chmod 700 .ssh
    3. 将本地复制的公钥追加到授权列表文件:echo "粘贴你本地复制的公钥内容" >> .ssh/authorized_keys
    4. 设置授权文件权限,SSH对权限校验非常严格,权限错误会直接拒绝公钥认证:chmod 600 .ssh/authorized_keys && chown -R ubuntu:ubuntu /home/ubuntu/.ssh
  • 排查本地SSH加载密钥是否正常
    重新执行ssh -Tv ubuntu@35.154.65.179查看调试输出,定位密钥加载问题:
    • 如果输出里没有出现你本地生成的对应私钥加载记录,说明SSH没有自动识别到密钥,可以手动指定私钥测试连接:ssh -i ~/.ssh/你的私钥文件名 ubuntu@35.154.65.179。如果测试连接成功,就在本地~/.ssh/config文件中添加固定配置,避免每次手动指定:
      Host 35.154.65.179
        User ubuntu
        IdentityFile ~/.ssh/你的私钥文件完整路径
        IdentitiesOnly yes
      
    • 如果输出里已经显示向服务器发送了对应公钥但仍被拒绝,回到上一步检查服务器上authorized_keys文件里的公钥内容是否和本地公钥完全一致,有没有多余空格、错漏字符,同时再次确认文件和目录权限符合要求。
  • 排查服务器SSH服务配置
    登录服务器后编辑SSH服务配置文件/etc/ssh/sshd_config,确认以下配置项为开启状态:
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    
    修改配置后执行sudo systemctl restart sshd重启SSH服务生效。
  • 最后校验Git仓库权限
    SSH可以正常免密登录后,检查服务器上裸仓库的目录权限,确保ubuntu用户对仓库全目录有读写权限,例如仓库存放在/home/ubuntu/repos/adiproduction.git路径下,就执行sudo chown -R ubuntu:ubuntu /home/ubuntu/repos/adiproduction.git修正权限,避免认证通过后因文件权限不足无法推送。

验证方法:本地直接执行ssh ubuntu@35.154.65.179,如果不需要输入密码就能成功登录服务器,再执行Git推送操作就不会再出现公钥认证拒绝的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:09:38