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
相关产品推荐
相关产品推荐

