Ansible不同端口、普通用户、解释器,直接连接和免密连接实践
本文提供了Ansible跨系统管理的优化配置方案,支持Rocky9和Ubuntu24.04系统,包含自定义SSH端口(2222/2223)、普通用户提权、免密连接等核心功能。方案包含控制端配置(主机清单优化、Ansible配置、一键免密脚本)和被控端标准化配置脚本(分别适配Rocky9的SELinux/firewalld和Ubuntu的systemd/ufw)。通过批量测试命令验证功能,并总结了跨
·
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
五、核心优化点总结
- 跨系统适配:
- Rocky9:处理SELinux端口权限+firewalld精准放行
- Ubuntu24.04:适配systemd socket激活模式+ufw防火墙
- 易用性提升:
- 固定Python解释器,消除Ansible警告
- 配置免密连接,无需每次输入
-k参数 - 全局变量统一配置,批量管理更简洁
- 安全性加固:
- 防火墙仅放行控制端IP访问自定义端口
- 普通用户提权(避免直接用root)
- 关闭主机密钥检查(批量管理友好)
六、运维扩展建议
-
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 -
监控告警:结合Ansible Facts收集被控端信息,或集成Prometheus监控端口/服务状态。
-
版本控制:将Ansible配置文件/Playbook纳入Git管理,便于多人协作和版本回溯。
更多推荐
所有评论(0)