香港服务器Ansible批量管理失效:SSH多跳环境下的Inventory配置优化

香港服务器Ansible批量管理失效:SSH多跳环境下的Inventory配置优化

我们在日常的香港服务器运维自动化过程中,Ansible 是我们核心的批量管理工具,在一次例行的批量更新任务中,我们发现在管理位于香港机房的一批服务器时,Ansible 执行任务全部失败,提示无法连接目标主机。然而,同样的Playbook在其他区域(如新加坡、东京)的服务器上执行正常。这一异常引起了我们的关注。

这批香港服务器的网络结构与其他区域不同:它们处于一个隔离的私有网络中,需通过跳板机(Jump Host/Bastion Host)进行访问。这一架构上的差异,最终成为我们排查问题并优化 Inventory 配置的关键线索。

一、问题描述

1.1 执行Ansible命令失败

$ ansible all -i hosts_hk -m ping

host_192.168.10.15 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.10.15 port 22: Connection timed out",
    "unreachable": true
}

所有目标主机均返回“UNREACHABLE”,提示SSH连接超时。

1.2 手动SSH登录测试

我们从Ansible控制节点(控制机)直接执行SSH命令测试:

$ ssh 192.168.10.15
ssh: connect to host 192.168.10.15 port 22: Connection timed out

同样失败。但如果先SSH到跳板机,再从跳板机登录目标服务器,则连接成功:

$ ssh jump.hongkong.datacenter
$ ssh 192.168.10.15

说明目标服务器正常运行,问题在于无法直连,需要配置多跳SSH。

二、问题分析

Ansible默认采用SSH直连目标主机的方式进行远程操作,若中间存在跳板机,而配置中未明确指出,Ansible将无法自动穿透。

通过分析Ansible的连接模型,我们确认需要使用 ProxyJump(SSH跳板)或更早版本支持的 ProxyCommand 来实现多跳连接。

三、原始Inventory配置(错误示例)

[hongkong_servers]
192.168.10.15
192.168.10.16

[hongkong_servers:vars]
ansible_user=root
ansible_port=22

这种配置适用于目标主机可直接访问的情况,不适用于当前的多跳网络结构。

四、解决方案:优化Inventory配置支持SSH多跳

4.1 方法一:使用 ansible_ssh_common_args + ProxyJump

[hongkong_servers]
192.168.10.15
192.168.10.16

[hongkong_servers:vars]
ansible_user=root
ansible_port=22
ansible_ssh_common_args='-o ProxyJump=your_user@jump.hongkong.datacenter'

这种方式适用于OpenSSH 7.3及以上版本,简洁直观。

4.2 方法二:使用 ProxyCommand(兼容旧版SSH)

[hongkong_servers]
192.168.10.15
192.168.10.16

[hongkong_servers:vars]
ansible_user=root
ansible_port=22
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p your_user@jump.hongkong.datacenter"'

这一方式适用于较老版本OpenSSH或者更复杂的链式跳板。

4.3 方法三:结合SSH配置文件优化

为了避免重复配置,还可以在 ~/.ssh/config 文件中集中定义跳板机策略:

Host hk-server-*
    ProxyJump your_user@jump.hongkong.datacenter
    User root
    Port 22

Host 192.168.10.*
    ProxyJump your_user@jump.hongkong.datacenter
    User root
    Port 22

然后在Inventory中这样写:

[hongkong_servers]
hk-server-01 ansible_host=192.168.10.15
hk-server-02 ansible_host=192.168.10.16

Ansible会自动读取SSH配置文件并应用跳板设置。

五、案例验证

优化配置后再次执行:

$ ansible all -i hosts_hk -m ping

host_192.168.10.15 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host_192.168.10.16 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

连接成功,问题解决。

六、经验与技巧分享

  • Ansible在多跳SSH场景下需显式声明跳板机连接方式,否则默认直连会失败。
  • ansible_ssh_common_args 是关键参数,可直接嵌入跳板配置。
  • 推荐使用SSH配置文件统一管理复杂网络连接规则,让Ansible配置更简洁。
  • 排查时要回归基本网络连通性测试,确认是物理连通性问题还是配置失误。
  • 在不同环境测试同一Playbook时,应充分考虑网络结构差异,不可盲目迁移配置。

七、附加建议

  • 对于大型多区域架构,可使用动态Inventory或Inventory插件(如 constructed、yaml)管理多环境变量。
  • 在团队内部统一跳板策略、SSH配置规范,有助于运维工作标准化。
  • 定期对跳板机做安全加固,包括双因素认证、日志审计等措施。

以上即为本次香港服务器Ansible批量管理失效的排查与优化过程,希望能为在类似网络结构下工作的工程师们提供有价值的参考。

未经允许不得转载:A5数据 » 香港服务器Ansible批量管理失效:SSH多跳环境下的Inventory配置优化

相关文章

contact