部署Node.js时Git推送远程仓库报publickey权限拒绝问题咨询
问题原因
该报错属于SSH公钥认证失败,和你写的post-receive钩子逻辑无关——当前连接在SSH认证阶段就被服务器拒绝,根本没有进入Git仓库读写、钩子触发的流程。
排查解决步骤
- 先排查本地公钥是否正确配置到服务器
本地终端执行对应命令查看公钥内容:如果是RSA密钥执行cat ~/.ssh/id_rsa.pub,如果是ED25519密钥执行cat ~/.ssh/id_ed25519.pub,复制输出的全部公钥文本。
通过云厂商网页控制台、密码登录等其他可用方式登录目标服务器,按以下步骤操作:- 切换到ubuntu用户家目录:
cd /home/ubuntu - 不存在.ssh目录则新建,并设置正确目录权限:
mkdir -p .ssh && chmod 700 .ssh - 将本地复制的公钥追加到授权列表文件:
echo "粘贴你本地复制的公钥内容" >> .ssh/authorized_keys - 设置授权文件权限,SSH对权限校验非常严格,权限错误会直接拒绝公钥认证:
chmod 600 .ssh/authorized_keys && chown -R ubuntu:ubuntu /home/ubuntu/.ssh
- 切换到ubuntu用户家目录:
- 排查本地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服务配置
登录服务器后编辑SSH服务配置文件/etc/ssh/sshd_config,确认以下配置项为开启状态:
修改配置后执行PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keyssudo 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
相关产品推荐
相关产品推荐

