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

CentOS容器中Ansible经Gitlab runner执行时出现公钥认证失败问题

问题修复方案

核心错误原因

你遇到的SSH公钥认证失败,核心是SSH客户端对密钥文件/目录的权限有严格安全校验,你当前配置的权限不符合要求,被SSH直接拒绝读取私钥。

具体修复步骤

  • 修正SSH相关文件权限
    删除原有的chmod -R 744 /home/ansible/.ssh/id_rsa*配置,替换为符合SSH安全要求的权限设置:
chmod 700 /home/ansible/.ssh
chmod 600 /home/ansible/.ssh/id_rsa

SSH要求.ssh目录权限必须为700(仅所有者可读可写可进入),私钥文件权限必须为600(仅所有者可读可写),权限过宽会被SSH判定为存在泄露风险,直接拒绝认证。

  • 调整.gitlab-ci.yml配置
    替换before_script中用户配置部分的代码:
# Setup user
- useradd ansible
- mkdir -p /home/ansible/.ssh
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > /home/ansible/.ssh/id_rsa
# 修正权限配置
- chmod 700 /home/ansible/.ssh
- chmod 600 /home/ansible/.ssh/id_rsa
- chown ansible:ansible -R /home/ansible/.ssh
  • 可选:适配CentOS 8默认SSH算法限制
    如果修正权限后仍报错,是因为CentOS 8默认禁用了老旧的RSA-SHA1算法,若你使用的是RSA格式私钥,在ansible执行命令中添加算法兼容参数即可:
ansible all -i lshyp01.lab, -u ansible -v --private-key=/home/ansible/.ssh/id_rsa -e 'ansible_ssh_extra_args="-o PubkeyAcceptedKeyTypes=+ssh-rsa"' -a "/usr/sbin/ping -c 3 8.8.8.8"

排查辅助手段

如果调整后仍有问题,在ansible命令中添加-vvv参数输出详细SSH连接日志,可直接定位具体认证失败原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:21:02