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

无法以root用户运行Ansible Playbook连接远程主机

关于Ansible连接webserver1失败的问题排查

1. 运行的Playbook内容

-
 name: "This is service play"
 hosts: webserver1
 tasks:
  -
   name: "start apache2 service"
   service:
     name: apache2
     state: started #stopped

2. 执行Playbook时的错误输出

root@kubemaster:/etc/ansible/playbook/modules/service# ansible-playbook apache2.yml
[WARNING]:  * Failed to parse /etc/ansible/inventory/inventory.txt with ini plugin: /etc/ansible/inventory/inventory.txt:12: Section [all_servers:children] includes
undefined group: sql_servers
[WARNING]: Unable to parse /etc/ansible/inventory/inventory.txt as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available

PLAY [This is service play] *****************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************
fatal: [webserver1]: UNREACHABLE! => {"changed": false, "msg": "Invalid/incorrect password: Permission denied, please try again.", "unreachable": true}

PLAY RECAP **********************************************************************************************************************************************************
webserver1                 : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

3. Inventory文件内容

root@kubemaster:/etc/ansible/playbook/modules/service# cat ../../../inventory/inventory.txt
webserver1 ansible_host=192.168.1.12 ansible_ssh_pass=sneha ansible_connection=ssh ansible_port=22 ansible_user=root
sqlserver1 ansible_host=192.168.1.11 ansible_ssh_pass=sneha ansible_connection=ssh ansible_port=22 ansible_user=ahens

[web_servers]
websever1

[sql_server]
sqlserver1

[all_servers:children]
web_servers
sql_servers

4. 已尝试的排查操作

  • 开启远程主机root的SSH访问,编辑/etc/ssh/sshd_config文件,将PermitRootLogin和PasswordAuthentication选项设为yes,并重启SSH服务
  • 检查远程主机防火墙规则,当前防火墙处于未激活状态(也曾尝试激活防火墙并允许SSH服务)
  • 手动通过SSH连接远程主机验证凭据:普通用户ahens可正常登录,但root用户登录时提示权限拒绝,确认凭据无误
  • 尝试ping远程主机,结果正常

问题根源

  1. Inventory文件语法错误:
    • [web_servers]组下的主机名拼写错误:写成websever1,实际应为webserver1
    • [all_servers:children]中引用的sql_servers组不存在,Inventory里实际组名为sql_server(少一个s),导致Inventory解析失败,Ansible仅能识别localhost,这也是警告信息的来源
  2. root用户SSH登录失败:
    虽修改了sshd_config,但可能存在以下情况:
    • 修改配置后未正确重启SSH服务
    • 远程主机root密码存在误差(可尝试重置确认)
    • /etc/ssh/sshd_config.d/目录下的额外配置文件覆盖了主配置,禁止root登录

解决步骤

第一步:修复Inventory文件错误

修改inventory.txt内容如下:

webserver1 ansible_host=192.168.1.12 ansible_ssh_pass=sneha ansible_connection=ssh ansible_port=22 ansible_user=root
sqlserver1 ansible_host=192.168.1.11 ansible_ssh_pass=sneha ansible_connection=ssh ansible_port=22 ansible_user=ahens

[web_servers]
webserver1  # 修正拼写错误

[sql_servers]  # 修正组名
sqlserver1

[all_servers:children]
web_servers
sql_servers

第二步:确保root用户可SSH登录远程主机

  1. 用ahens用户登录远程主机,检查SSH配置:
# 查看PermitRootLogin设置
grep -i "PermitRootLogin" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf
# 查看PasswordAuthentication设置
grep -i "PasswordAuthentication" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf

确保输出均为yes。
2. 重启SSH服务:

sudo systemctl restart sshd
  1. 若仍无法登录,重置root密码:
sudo passwd root

设置新密码后再次尝试SSH登录root用户。

第三步:重新执行Playbook

修复上述问题后,重新运行命令:

ansible-playbook apache2.yml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:07:03