Ansible 跨系统自定义端口+普通用户提权

结合所有排错实践,以下是可直接复用的最终优化版配置,涵盖Rocky9/Ubuntu24.04跨系统适配、自定义端口、普通用户提权、免密连接、批量管理全场景,开箱即用。

一、整体架构说明

节点角色 IP/系统 SSH端口 普通用户 核心特性
控制端 10.0.0.13(Ubuntu24.04) 22 root Ansible主控、免密密钥分发
被控端1 10.0.0.12(Rocky9) 2222 putong SELinux+firewalld适配
被控端2 10.0.0.16(Ubuntu24.04) 2223 putong systemd socket+ufw适配

二、Step 1:控制端(10.0.0.13)最终配置

1. 主机清单优化版(/etc/ansible/hosts)

# 自定义端口主机组(含Python解释器固定,消除警告)
[custom_port_hosts]
10.0.0.12:2222 ansible_python_interpreter=/usr/bin/python3.9
10.0.0.16:2223 ansible_python_interpreter=/usr/bin/python3

# 全局变量(可选,统一配置)
[custom_port_hosts:vars]
ansible_user=putong          # 默认普通用户
ansible_become=yes           # 默认提权
ansible_become_method=sudo   # 提权方式
ansible_become_ask_pass=no   # 免密提权(需被控端配置sudo NOPASSWD)

2. Ansible配置优化(/etc/ansible/ansible.cfg)

[defaults]
inventory      = /etc/ansible/hosts
remote_user    = putong
host_key_checking = False  # 关闭主机密钥检查(批量管理更友好)
timeout = 30               # 超时时间

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False      # 免密提权

3. 控制端一键免密配置脚本(/root/ansible_init.sh)

#!/bin/bash
# 生成SSH密钥(无密码)
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

# 分发密钥到被控端(需输入putong用户密码)
ssh-copy-id -p 2222 putong@10.0.0.12
ssh-copy-id -p 2223 putong@10.0.0.16

# 测试批量连接
ansible custom_port_hosts -m ping
echo "免密配置完成!"

执行脚本:

chmod +x /root/ansible_init.sh
/root/ansible_init.sh

三、Step 2:被控端标准化配置脚本

1. 被控端1(10.0.0.12,Rocky9)一键配置脚本(/root/host_init.sh)

#!/bin/bash
# 1. 配置SSH多端口+SELinux
sed -i '/^Port 22/a Port 2222' /etc/ssh/sshd_config
setenforce 0
semanage port -a -t ssh_port_t -p tcp 2222
systemctl restart sshd
setenforce 1

# 2. 开放防火墙端口
firewall-cmd --add-port=2222/tcp --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.13" port port="2222" protocol="tcp" accept' --permanent
firewall-cmd --reload

# 3. 创建普通用户+免密sudo
useradd -m putong
echo "putong:123456" | chpasswd  # 设置密码(可自定义)
echo "putong ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

echo "Rocky9配置完成!"

执行:

chmod +x /root/host_init.sh
/root/host_init.sh

2. 被控端2(10.0.0.16,Ubuntu24.04)一键配置脚本(/root/host_init.sh)

#!/bin/bash
# 1. 配置SSH多端口+systemd socket
sed -i '/^Port 22/a Port 2223' /etc/ssh/sshd_config
systemctl daemon-reload
systemctl restart ssh.socket
systemctl restart ssh

# 2. 安装并配置ufw防火墙
apt update && apt install -y ufw
ufw allow 22/tcp
ufw allow 2223/tcp
ufw allow from 10.0.0.13 to any port 2223
ufw enable -y

# 3. 创建普通用户+免密sudo
useradd -m putong
echo "putong:123456" | chpasswd  # 与Rocky9统一密码
echo "putong ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

echo "Ubuntu24.04配置完成!"

执行:

chmod +x /root/host_init.sh
/root/host_init.sh

四、Step 3:最终验证命令(控制端执行)

1. 批量Ping测试(免密)

ansible custom_port_hosts -m ping

预期输出:

10.0.0.12 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
10.0.0.16 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

2. 批量提权执行命令(免密)

ansible custom_port_hosts -a "ls /root"

预期输出:

10.0.0.12 | CHANGED | rc=0 >>
anaconda-ks.cfg
10.0.0.16 | CHANGED | rc=0 >>
# (Ubuntu/root目录默认无文件,空输出为正常)

3. 批量安装软件示例(扩展用法)

# Rocky9安装nginx,Ubuntu安装apache2
ansible custom_port_hosts -m yum -a "name=nginx state=installed" --limit 10.0.0.12
ansible custom_port_hosts -m apt -a "name=apache2 state=installed" --limit 10.0.0.16

五、核心优化点总结

  1. 跨系统适配
    • Rocky9:处理SELinux端口权限+firewalld精准放行
    • Ubuntu24.04:适配systemd socket激活模式+ufw防火墙
  2. 易用性提升
    • 固定Python解释器,消除Ansible警告
    • 配置免密连接,无需每次输入-k参数
    • 全局变量统一配置,批量管理更简洁
  3. 安全性加固
    • 防火墙仅放行控制端IP访问自定义端口
    • 普通用户提权(避免直接用root)
    • 关闭主机密钥检查(批量管理友好)

六、运维扩展建议

  1. Playbook化:将常用操作写成Playbook(如批量部署服务、备份配置),示例:

    # /etc/ansible/playbooks/init_hosts.yml
    - hosts: custom_port_hosts
      tasks:
        - name: 安装常用工具
          package:
            name: [wget, vim, net-tools]
            state: installed
        - name: 启动sshd服务
          service:
            name: "{{ 'sshd' if ansible_os_family == 'RedHat' else 'ssh' }}"
            state: started
            enabled: yes
    

    执行:ansible-playbook /etc/ansible/playbooks/init_hosts.yml

  2. 监控告警:结合Ansible Facts收集被控端信息,或集成Prometheus监控端口/服务状态。

  3. 版本控制:将Ansible配置文件/Playbook纳入Git管理,便于多人协作和版本回溯。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐