GitLab CI部署执行rsync同步出现Permission denied认证错误怎么解决
解决GitLab CI部署rsync SSH权限报错方案
该报错核心为SSH公钥认证失败,可按以下步骤逐一排查修复:
0. 核对GitLab CI变量配置
- 检查
$SSH_PRIVATE_KEY变量内容为完整私钥,包含开头-----BEGIN OPENSSH PRIVATE KEY-----和结尾-----END OPENSSH PRIVATE KEY-----,无多余空格、换行或缺失字符 - 确认该变量没有设置为「受保护变量」,否则只有受保护分支/标签才能读取该变量
1. 核对公私钥匹配关系
- 存储在GitLab CI变量中的是私钥,对应的公钥必须提前添加到目标Ubuntu服务器的
/root/.ssh/authorized_keys文件中,不可搞反公私钥
2. 核对目标服务器SSH配置
登录目标Ubuntu服务器,修改SSH配置:
- 编辑配置文件:
sudo vim /etc/ssh/sshd_config - 确认以下配置项开启:
PermitRootLogin yes # 若使用普通用户部署无需开启该项,替换为对应用户权限配置即可 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
- 重启SSH服务生效:
sudo systemctl restart sshd
3. 核对目标服务器文件权限
SSH对认证相关文件权限有严格要求,权限错误会直接拒绝认证,执行以下命令修正:
chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys chown root:root /root/.ssh -R
4. 核对CI脚本密钥类型配置
你当前脚本将私钥写入了~/.ssh/id_dsa文件,DSA密钥在新版OpenSSH中默认被禁用,根据你生成的密钥类型修改对应文件名:
- RSA密钥:修改为
~/.ssh/id_rsa - ED25519密钥:修改为
~/.ssh/id_ed25519
5. 核对网络与端口配置
- 确认目标服务器防火墙放行了5432端口的入站请求
- 确认GitLab Runner所在服务器可正常访问目标服务器的5432端口
6. 调试排查
如果以上步骤都无法解决,可在CI脚本的rsync命令前添加SSH调试命令,输出详细认证日志定位问题:ssh -v -p 5432 root@你的目标服务器地址
内容的提问来源于stack exchange,提问作者S.M_Emamian
相关产品推荐
相关产品推荐

