在现代IT基础设施中,批量管理多台服务器是运维工作的核心需求之一。Ansible作为一款强大的自动化工具,可以帮助我们高效完成这一任务。然而,在实际生产环境中,服务器通常部署在内网,无法直接通过管理机访问。这时,我们可以借助一台跳板机(代理机)来实现批量管理。
本文将详细介绍如何通过Ansible和SSH跳板机批量管理远程服务器,涵盖从网络架构设计到具体配置的全流程。无论你是运维工程师还是DevOps爱好者,都能从中获得实用的技术方案。
一、场景描述
假设我们有以下环境:
- 10台目标服务器:运行openeuler操作系统,部署在内网,无法直接通过管理机访问。
- 1台代理机(跳板机):可以访问所有10台目标服务器。
- 1台管理机:运行Ansible,可以访问代理机,但无法直接访问目标服务器。
我们的目标是通过管理机,使用Ansible脚本批量管理这10台目标服务器。
二、技术方案概述
为了实现目标,我们需要完成以下步骤:
- 配置代理机:确保代理机可以通过SSH免密登录所有目标服务器。
- 配置管理机:通过SSH隧道跳转,使管理机能够间接访问目标服务器。
- 配置Ansible:编写Inventory文件,指定SSH跳转和密钥路径。
- 测试连通性:使用Ansible的
ping
模块验证配置是否成功。
三、详细配置步骤
1. 配置代理机
1.1 生成SSH密钥
在代理机上生成SSH密钥对(如果已有密钥可跳过):
ssh-keygen -t rsa -b 4096 -C "proxy-key"
按提示完成密钥生成,默认会保存在~/.ssh/id_rsa
(私钥)和~/.ssh/id_rsa.pub
(公钥)。
1.2 分发公钥到目标服务器
将代理机的公钥分发到所有10台目标服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@target-server-ip
确保代理机可以通过SSH免密登录所有目标服务器。
1.3 配置SSH服务(可选)
如果需要通过SSH隧道转发流量,需确保代理机的SSH服务允许端口转发:
# 修改代理机的 /etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes
重启SSH服务以生效:
systemctl restart sshd
2. 配置管理机
2.1 生成SSH密钥
在管理机上生成SSH密钥对(如果已有密钥可跳过):
ssh-keygen -t rsa -b 4096 -C "ansible-control-key"
2.2 分发公钥到代理机
将管理机的公钥部署到代理机:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@proxy-ip
2.3 配置SSH跳转
在管理机上配置SSH跳转,编辑~/.ssh/config
文件:
Host proxy
HostName proxy-ip
User your-proxy-user
IdentityFile ~/.ssh/id_rsa
Host target-server-*
User target-server-user
ProxyJump proxy
IdentityFile ~/.ssh/proxy-key # 代理机访问目标服务器的私钥
- 将代理机的私钥(
~/.ssh/id_rsa
)复制到管理机的~/.ssh/
目录,并重命名为proxy-key
。 - 设置私钥文件的权限:
chmod 600 ~/.ssh/proxy-key
3. 配置Ansible
3.1 创建Inventory文件
在管理机上创建Ansible的Inventory文件(inventory.ini
):
[all]
target-server-1 ansible_host=192.168.1.101
target-server-2 ansible_host=192.168.1.102
...
target-server-10 ansible_host=192.168.1.110
[all:vars]
ansible_ssh_common_args='-o ForwardAgent=yes -o StrictHostKeyChecking=no'
ansible_ssh_private_key_file=~/.ssh/proxy-key
3.2 测试Ansible连通性
使用Ansible的ping
模块测试所有节点的连通性:
ansible all -i inventory.ini -m ping
如果配置正确,所有节点会返回pong
响应。
四、操作流程总结
- 代理机准备:
- 生成SSH密钥对。
- 将公钥分发到所有目标服务器。
- 确保代理机能通过SSH免密登录目标服务器。
- 管理机配置:
- 生成SSH密钥对。
- 将公钥分发到代理机。
- 配置SSH跳转和私钥路径。
- Ansible配置:
- 编写Inventory文件,指定代理机私钥和SSH参数。
- 验证:
- 使用
ansible -m ping
测试所有节点连通性。
- 使用
五、注意事项
- 密钥安全:
- 代理机的私钥需严格保密,建议使用非root用户部署。
- 防火墙配置:
- 确保代理机和目标服务器的防火墙允许SSH流量。
- SELinux:
- 如遇连接问题,可临时禁用SELinux测试(
setenforce 0
)。
- 如遇连接问题,可临时禁用SELinux测试(
六、结语
通过本文的配置,你可以轻松实现通过Ansible和SSH跳板机批量管理远程服务器。这种方案不仅适用于openeuler系统,还可以推广到其他Linux发行版。希望本文能为你提供实用的技术参考,助你在运维工作中事半功倍!
如果你有任何问题或建议,欢迎在评论区留言讨论!
评论