Gitlab CI部署DigitalOcean报Permission denied(publickey,password)如何解决
SSH认证失败排查解决步骤
核对密钥对匹配性
确认GitLab CI/CD变量中存储的PRIVATE_KEY是对应你上传到DO服务器公钥的私钥,完整包含-----BEGIN RSA PRIVATE KEY-----开头和-----END RSA PRIVATE KEY-----结尾的标记行,无多余空格、换行、回车符。你可以在本地用该私钥尝试手动SSH登录DO服务器验证有效性:ssh -i 本地私钥路径 root@143.198.103.99如果本地登录也失败,说明密钥对本身不匹配,重新生成密钥对后分别上传公钥到DO服务器、更新私钥到GitLab变量即可。
修正DO服务器SSH相关文件权限
SSH服务对密钥文件权限有严格要求,权限过大会直接拒绝认证。登录到DO服务器执行以下命令修正权限:chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys chown -R root:root /root/.ssh验证DO服务器SSH配置
打开服务器上/etc/ssh/sshd_config文件,确认以下配置项未被注释、取值正确:PubkeyAuthentication yes PermitRootLogin prohibit-password配置修改完成后执行
systemctl restart sshd重启SSH服务生效。确认GitLab变量配置正确性
进入GitLab项目的「设置- CI/CD -变量」页面,确认PRIVATE_KEY变量的内容完整,没有被掩码或保护规则截断。如果开启了「仅受保护分支可访问」,需要确认master分支属于受保护分支。开启调试日志定位问题
若上述步骤都未解决问题,可以修改deploy阶段的scp命令,添加-v参数输出详细认证日志:scp -v -o StrictHostKeyChecking=no -r ./.env ./docker-compose.prod.yml root@$DO_PUBLIC_IP_ADDRESS:/Pythonist.org重新运行部署任务后,根据调试日志中的具体报错信息进一步定位问题根源,比如密钥不匹配、服务器主动拒绝认证等。
内容的提问来源于stack exchange,提问作者Abdul Rehman
相关产品推荐
相关产品推荐

