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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:57:35