如何在Ansible中轻松实现复杂SSH跳转?一文掌握ansible_ssh_common_args
在日常的运维工作中,我们经常会遇到需要通过跳板机来访问目标主机的情况。那么,如何高效地配置Ansible
以支持多级跳转或复杂的 SSH 设置呢?ansible_ssh_common_args
提供了一个非常灵活的解决方案。在这篇文章中,我们将详细探讨它的功能,并通过一些实际案例来帮助你快速上手。希望这些内容能对你有所帮助!
什么是ansible_ssh_common_args
ansible_ssh_common_args
是Ansible
中用于定义SSH
额外参数的变量。这些参数会在Ansible
执行任务时传递给底层的ssh
命令,从而实现定制化的连接配置。
常见用途
- 实现跳板机连接。
- 提供给ssh、sftp、scp命令的额外参数
- 调试
SSH
连接或指定特定的密钥文件。
基本语法和配置
ansible_ssh_common_args
的值必须符合SSH的参数格式,例如-o
选项
定义方式:
- 在
hosts
清单中配置:
[target]
target_host ansible_host=192.168.2.101 ansible_ssh_common_args='-o ProxyCommand="sshpass -p password ssh -W %h:%p -q user@192.168.1.100"'
参数含义:
target_host
: 主机组中的主机别名。
ansible_host
: 指定目标主机的实际IP地址。
ansible_ssh_common_args
:定义了Ansible
在SSH
连接时使用的额外参数 。
ProxyCommand
是SSH的一个选项,表示通过代理命令来处理连接。
sshpass
: 是一个工具,用于通过明文密码非交互式地登录SSH。
-W %h:%p
: 将目标主机的地址%h
和端口%p
直接转发到跳板机 。
-q
:静默模式,禁止显示SSH
的警告信息。
- 在
Playbook
中定义:
- name: Use ProxyJump to access target host
hosts: all
vars:
ansible_ssh_common_args: '-o ProxyCommand="sshpass -p password ssh -W %h:%p -q user@192.168.1.100"'
tasks:
- name: Ping target host
ping:
- 在
ansible.cfg
配置文件中全局定义:
[ssh_connection]
ssh_args = -o ProxyCommand="sshpass -p password ssh -W %h:%p -q user@192.168.1.100"
实战案例:实现复杂SSH跳转
场景描述
我们有以下需求:
-
通过跳板机
192.168.1.253
访问目标主机192.168.31.101
。 -
跳板机和目标主机的用户名和密码均不同。
-
未设置免密登录,需要提供密码。
案例 1:单级跳转
通过跳板机访问目标主机:
[target]
target_host ansible_host=192.168.31.101 ansible_ssh_pass="didiplus558" ansible_ssh_common_args='-o ProxyCommand="sshpass -p password ssh -W %h:%p -q root@192.168.1.253"'
运行命令:
ansible target_hosts -m ping -i hosts
运行成功如下图所示:
案例 2:多级跳转
需要通过两级跳板机连接目标主机:
-
第一跳:通过
192.168.1.252
。 -
第二跳:通过
192.168.1.253
。
配置文件:
[target_hosts]
host1 ansible_host=192.168.31.101 ansible_ssh_pass="password" ansible_ssh_common_args='-o ProxyCommand="sshpass -p password ssh -W %h:%p -q didiplus@192.168.1.252 -o ProxyCommand=\"sshpass -p password ssh -W %h:%p -q root@192.168.1.253\""'
运行命令:
ansible target_hosts -m ping -i hosts
ProxyCommand
实现了两级跳转,内嵌的ssh
命令依次通过两个跳板机转发到目标主机。
总结
通过ansible_ssh_common_args
,我们可以在Ansible
中轻松实现复杂的SSH
配置,包括多级跳板机跳转等。结合实际场景的灵活应用,可以大幅提升运维效率。希望通过本文的案例,你能熟练掌握该参数的使用,为日常工作带来更多便利!
推荐阅读
- Ansible Setup模块实战,如何使用Setup模块收集主机信息
- 从入门到精通:Ansible Shell 模块的应用与最佳实践
- 深入了解Ansible配置与主机清单:轻松管理自动化任务
- 效率提升神器:Ansible入门,开启自动化运维之旅
- Kubernetes 镜像拉取策略全解析:如何根据需求选择最佳配置?
- ncdu:Linux磁盘分析的利器,你值得拥有