Ansible无法连接Docker容器:SSH连接被拒绝问题求助
Ansible SSH连接容器失败问题
执行ansible all -m ping时返回以下错误:
client-1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.17.0.2 port 22: Connection refused", "unreachable": true } client-2 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.17.0.3 port 22: Connection refused", "unreachable": true }
我的配置文件如下:
/etc/ansible/hosts
client-1 ansible_host=172.17.0.2 ansible_user=root ansible_password=ptest client-2 ansible_host=172.17.0.3 ansible_user=utest ansible_password=ptest
/etc/ansible/ansible.cfg
[default] inventory = /etc/ansible/hosts host_key_checking = false
已尝试操作:
- 在两个容器中安装
python3-pip - 通过
docker network命令将容器加入同一网络
但仍无法连通。
排查与解决步骤
1. 确认容器内SSH服务已安装并启动
多数基础容器镜像默认未预装SSH服务,需手动安装并启动:
# Debian/Ubuntu 系列 apt update && apt install -y openssh-server systemctl start sshd systemctl enable sshd # Alpine 系列 apk add openssh rc-service sshd start rc-update add sshd
2. 直接测试SSH连通性
先跳过Ansible,在控制节点用原生SSH命令验证:
ssh root@172.17.0.2 -p 22 ssh utest@172.17.0.3 -p 22
如果此步骤失败,说明问题出在容器SSH服务或网络,而非Ansible配置。
3. 调整SSH服务配置
容器内编辑/etc/ssh/sshd_config,确保以下配置生效:
PermitRootLogin yes(使用root用户连接时必须开启)PasswordAuthentication yes(密码登录需启用)
修改后重启SSH服务:
# Debian/Ubuntu systemctl restart sshd # Alpine rc-service sshd restart
4. 验证容器用户与密码
针对client-2的utest用户,确认容器内该用户存在且密码正确:
# 创建用户(若不存在) useradd utest # 设置密码 echo "utest:ptest" | chpasswd
5. 确认Docker网络连通性
确保Ansible控制节点与目标容器处于同一Docker网络,且网络内无防火墙规则拦截22端口流量。可通过docker network inspect <网络名>查看容器IP是否正确,或在控制节点ping容器IP验证连通性。
内容的提问来源于stack exchange,提问作者TheDude
相关产品推荐
相关产品推荐

