Jenkins中Ansible插件SSH连接失败问题求助
Jenkins中使用Ansible插件SSH连接失败问题排查与解决
问题描述
执行Ansible插件时出现以下错误:
"Failed to connect to the host via ssh: Load key "/etc/ansible/jenkinsPem": Permission denied\r\nmadchabelo@targethost: Permission denied (publickey,password).", "unreachable": true}
相关配置文件
hosts文件:
[targets] targethost ansible_user=madchabelo ansible_private_key_file=/etc/ansible/jenkinsPem mysqlhost ansible_user=madchabelo ansible_private_key_file=/etc/ansible/jenkinsPem
Playbook内容:
--- - name: Playbook for jenkins hosts: [targets] tasks: - name: hello world shell: echo Hello World again
异常现象
直接在本地Shell执行以下命令可正常运行:
ansible-playbook -i /etc/ansible/hosts /etc/ansible/playbook/jenkinsansible.yaml
但通过Jenkins的Ansible插件执行时出现权限拒绝错误。
问题原因
核心原因是Jenkins进程默认以jenkins用户运行,该用户没有读取私钥文件/etc/ansible/jenkinsPem的权限。本地Shell执行正常是因为当前登录用户拥有该文件的读取权限,而Jenkins服务使用独立用户,权限不继承。
解决方案
1. 调整私钥文件权限
SSH私钥文件要求严格权限(通常为600),同时需确保jenkins用户拥有读取权限:
# 将私钥文件所有者改为jenkins用户 sudo chown jenkins:jenkins /etc/ansible/jenkinsPem # 设置符合SSH要求的权限 sudo chmod 600 /etc/ansible/jenkinsPem
2. 检查并调整目录权限
确保jenkins用户能访问/etc/ansible目录:
sudo chmod 700 /etc/ansible sudo chown jenkins:jenkins /etc/ansible
3. 验证Jenkins用户的SSH连接
切换到jenkins用户,手动测试SSH连接,确认权限问题已解决:
sudo su - jenkins ssh -i /etc/ansible/jenkinsPem madchabelo@targethost
若能成功登录目标主机,说明权限配置正确,可重新运行Jenkins中的Ansible任务。
4. 插件配置补充(可选)
若上述步骤后仍有问题,可在Jenkins的Ansible插件配置页,手动指定私钥文件的绝对路径,确保插件调用时使用正确的密钥文件。
内容的提问来源于stack exchange,提问作者MadChabelo
相关产品推荐
相关产品推荐

