首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible在使用跳转主机时连接到错误的主机

Ansible在使用跳转主机时连接到错误的主机
EN

Stack Overflow用户
提问于 2018-05-17 23:12:35
回答 2查看 875关注 0票数 1

我在两个不同的数据中心管理主机。我通过跳转主机访问托管主机。每个数据中心都有一个专用的跳转主机。我的清单文件类似于:

代码语言:javascript
复制
$ cat inventory-dc1
[all:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q ubuntu@10.1.1.1"'

[docker]
docker-1 ansible_host=192.168.1.1
docker-2 ansible_host=192.168.1.2

$ cat inventory-dc2
[all:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q ubuntu@10.1.1.2"'

[docker]
docker-1 ansible_host=192.168.1.1
docker-2 ansible_host=192.168.1.2

当我使用inventory-dc1运行攻略时,一切都像预期的那样工作。

当我随后使用inventory-dc2运行攻略时,这个问题就显现出来了。Ansible从inventory-dc1而不是inventory-dc2连接到主机。我知道托管主机具有相同的IP地址,但它们是通过不同的跳转主机访问的。

EN

回答 2

Stack Overflow用户

发布于 2018-05-17 23:46:26

为每个库存设置唯一的控制路径:

代码语言:javascript
复制
[all:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q ubuntu@10.1.1.1" -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=~/.ansible/cp/dc1-ssh-%C'

请注意路径的dc1前缀。为第二个清单指定dc2

票数 1
EN

Stack Overflow用户

发布于 2018-05-17 23:12:35

问题是Ansible会自动启用SSH多路复用。这意味着Ansible建立的ssh连接如下所示:

代码语言:javascript
复制
CP=~/.ansible/cp/ansible-ssh-%h-%p-%r
ssh -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=$CP \
ubuntu@192.168.1.1 /bin/true

这将创建一个类似于~/.ansible/cp/ansible-ssh-192.168.1.1-22-ubuntu的套接字,并使其保持打开状态60秒。如果您在60秒内使用相同的IP地址、端口和用户名运行另一个ssh连接,您将连接到同一主机。

对我有效的解决方案是禁用Ansible的SSH多路复用:

代码语言:javascript
复制
$ cat ansible.cfg
[ssh_connection]
ssh_args = -o ControlMaster=no

这不是一个最优的解决方案,因为它会降低Ansible的速度。

另一种(次优:-)解决方案是手动移除插座:

代码语言:javascript
复制
rm ~/.ansible/cp/ansible-ssh-192.168.1.1-22-ubuntu
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50394912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档