在现代IT基础设施中,批量管理多台服务器是运维工作的核心需求之一。Ansible作为一款强大的自动化工具,可以帮助我们高效完成这一任务。然而,在实际生产环境中,服务器通常部署在内网,无法直接通过管理机访问。这时,我们可以借助一台跳板机(代理机)来实现批量管理。

本文将详细介绍如何通过Ansible和SSH跳板机批量管理远程服务器,涵盖从网络架构设计到具体配置的全流程。无论你是运维工程师还是DevOps爱好者,都能从中获得实用的技术方案。


一、场景描述

假设我们有以下环境:

  • 10台目标服务器:运行openeuler操作系统,部署在内网,无法直接通过管理机访问。
  • 1台代理机(跳板机):可以访问所有10台目标服务器。
  • 1台管理机:运行Ansible,可以访问代理机,但无法直接访问目标服务器。

我们的目标是通过管理机,使用Ansible脚本批量管理这10台目标服务器。


二、技术方案概述

为了实现目标,我们需要完成以下步骤:

  1. 配置代理机:确保代理机可以通过SSH免密登录所有目标服务器。
  2. 配置管理机:通过SSH隧道跳转,使管理机能够间接访问目标服务器。
  3. 配置Ansible:编写Inventory文件,指定SSH跳转和密钥路径。
  4. 测试连通性:使用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响应。


四、操作流程总结

  1. 代理机准备
    • 生成SSH密钥对。
    • 将公钥分发到所有目标服务器。
    • 确保代理机能通过SSH免密登录目标服务器。
  2. 管理机配置
    • 生成SSH密钥对。
    • 将公钥分发到代理机。
    • 配置SSH跳转和私钥路径。
  3. Ansible配置
    • 编写Inventory文件,指定代理机私钥和SSH参数。
  4. 验证
    • 使用ansible -m ping测试所有节点连通性。

五、注意事项

  1. 密钥安全
    • 代理机的私钥需严格保密,建议使用非root用户部署。
  2. 防火墙配置
    • 确保代理机和目标服务器的防火墙允许SSH流量。
  3. SELinux
    • 如遇连接问题,可临时禁用SELinux测试(setenforce 0)。

六、结语

通过本文的配置,你可以轻松实现通过Ansible和SSH跳板机批量管理远程服务器。这种方案不仅适用于openeuler系统,还可以推广到其他Linux发行版。希望本文能为你提供实用的技术参考,助你在运维工作中事半功倍!

如果你有任何问题或建议,欢迎在评论区留言讨论!