ansible批量配置更改,免密配置

本文介绍了如何使用Ansible进行批量自动化配置,特别是在客户有100多台主机需要修改SSH默认端口的情况下。通过在三台测试机上演示,包括Ansible的yum安装,环境配置,以及设置主机免密登录,详细阐述了如何实现免密登录并进行批量部署。

ansible批量自动化配置文件修改
背景:客户100多台的主机修改ssh默认端口,ansible完成批量自动化更改
利用三台测试机演示
1.ansible软件yum安装
Ansible的yum源:
baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/7/x86_64/

[root@node1 ~]# yum -y install ansible

2.ansible环境配置

[root@node1 ansible]# pwd
/etc/ansible
[root@node1 ansible]# cat hosts 
[test]
172.20.0.247
172,20.0.249

3.主机免密登录

[root@node1 ansible]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/devop/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/devop/.ssh/id_rsa.
Your public key has been saved in /home/devop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+tABTIFKSJCoLiAGrUNz+ceW6ZYacpCIz6CJl/RvP0Y devop@node1
The key's randomart image is:
+---[RSA 2048]----+
|==  ..o.         |
|=ooo.o           |
|
<think>根据用户需求,用户已经知道目标服务器的root码,需要快速批量配置登录。结合引用内容,我们可以使用多种方法实现,重点推荐使用Ansible工具,因为它是最适合批量操作的方案。 ### 核心思路 利用已知的root码,通过自动化工具批量推送公钥到目标服务器的`authorized_keys`文件中。 ### 方法1:使用Ansible(推荐) #### 前置条件 - 控制机已安装Ansible - 创建包含目标服务器IP的hosts文件(如`/etc/ansible/hosts`) ```ini [servers] server1 ansible_host=192.168.1.101 server2 ansible_host=192.168.1.102 ``` #### 执行命令(一步到位) ```bash # 单条命令完成(需提前设置好hosts文件) ansible all -m authorized_key \ -a "user=root key=\"$(< ~/.ssh/id_rsa.pub)\"" \ -k \ --ssh-common-args="-o StrictHostKeyChecking=no" ``` #### 参数说明 | 参数 | 作用 | |------|------| | `-m authorized_key` | 使用Ansible的公钥管理模块 | | `-a "user=root ..."` | 设置目标用户和公钥内容 | | `-k` | 提示输入SSH码(即root码) | | `--ssh-common-args` | 跳过主机钥验证 | ### 方法2:使用Shell脚本(无Ansible环境) #### 脚本示例(push_key.sh) ```bash #!/bin/bash # 需提前准备好IP列表文件 servers.txt KEY=$(cat ~/.ssh/id_rsa.pub) while read ip; do echo "正在配置 $ip ..." sshpass -p "你的root码" ssh -o StrictHostKeyChecking=no \ root@$ip "mkdir -p ~/.ssh && echo '$KEY' >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" done < servers.txt ``` #### 使用前提 1. 安装sshpass工具(Ubuntu: `sudo apt install sshpass`) 2. 创建IP列表文件servers.txt ```text 192.168.1.101 192.168.1.102 ``` ### 方法3:并行化改进(加速大批量操作) 使用GNU Parallel提升速度: ```bash # 安装parallel: sudo apt install parallel cat servers.txt | parallel -j 50 ' sshpass -p "password" ssh -o StrictHostKeyChecking=no \ root@{} "mkdir -p .ssh && cat >> .ssh/authorized_keys" < ~/.ssh/id_rsa.pub ' ``` ### 验证是否成功 ```bash # 测试单个节点 ssh root@server1 "hostname" # 批量测试(Ansible方式) ansible all -m ping ``` ### 安全加固建议 1. **权限校正**(引用内容强调): ```bash ansible all -m shell -a "chmod 700 /root; chmod 700 /root/.ssh; chmod 600 /root/.ssh/authorized_keys" ``` 2. **禁用码登录**(配置后执行): ```bash ansible all -m lineinfile \ -a "path=/etc/ssh/sshd_config regexp='^PasswordAuthentication' line='PasswordAuthentication no' state=present" ``` ### 效率对比表 | 方法 | 100台耗时 | 依赖工具 | 复杂度 | |------|----------|----------|--------| | Ansible | ~1分钟 | 需安装Ansible | ⭐⭐ | | 基础Shell脚本 | ~5分钟 | sshpass | ⭐⭐⭐ | | 并行化Shell | ~20秒 | parallel+sshpass | ⭐⭐ | > **注意**:所有方法均依赖首次连接时忽略主机钥验证(`StrictHostKeyChecking=no`),生产环境建议提前分发主机指纹[^4]。 §§相关问题§§ 1. 如何在不使用sshpass的情况下实现批量配置? 2. 如何验证多台服务器的登录是否全部成功? 3. 配置后如何批量关闭码登录? </think>### 知道root码时快速批量配置的方法 根据引用内容,以下是几种高效批量配置登录的方案(已知root码): #### 方法1:Ansible单命令方案(最推荐) ```bash # 一步完成公钥推送(支持码认证) ansible all -m authorized_key \ -a "user=root key='$(< ~/.ssh/id_rsa.pub)'" \ -k -u root \ --ssh-common-args="-o StrictHostKeyChecking=no" ``` **参数说明**: - `-k`:提示输入root码 - `-u root`:使用root账户 - `--ssh-common-args`:跳过主机钥验证 - `$(< ~/.ssh/id_rsa.pub)`:自动读取本地公钥 > **适用场景**:需先配置`/etc/ansible/hosts`定义目标主机[^2][^3] --- #### 方法2:Shell脚本批量推送 ```bash #!/bin/bash PASSWORD="your_root_password" # 替换为实际码 PUB_KEY=$(cat ~/.ssh/id_rsa.pub) for IP in 192.168.1.{100..120}; do sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no \ root@$IP "mkdir -p ~/.ssh && echo '$PUB_KEY' >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" echo "完成 $IP 配置" done ``` **依赖工具安装**: ```bash sudo apt install sshpass # Debian/Ubuntu sudo yum install sshpass # CentOS/RHEL ``` --- #### 方法3:Parallel并行加速方案 ```bash # 生成IP列表 seq -f "192.168.1.%g" 100 120 > servers.txt # 并行推送(10并发) cat servers.txt | parallel -j 10 \ "sshpass -p '$PASSWORD' ssh -o StrictHostKeyChecking=no root@{} \ 'echo $PUB_KEY >> ~/.ssh/authorized_keys'" ``` --- ### 关键验证步骤 1. **权限验证**: ```bash ansible all -m shell -a "ls -ld /root /root/.ssh /root/.ssh/authorized_keys" ``` 预期输出: ``` /root: drwx------ /root/.ssh: drwx------ authorized_keys: -rw------- ``` 2. **连接测试**: ```bash # 批量测试登录 ansible all -m ping # 或单节点测试 ssh -o BatchMode=yes root@server_ip ``` --- ### 安全增强建议 1. **执行后立即修改码**: ```bash ansible all -m user -a "name=root password='新码'" ``` 2. **关闭码登录**: ```bash ansible all -m lineinfile \ -a "path=/etc/ssh/sshd_config regexp='^PasswordAuthentication' line='PasswordAuthentication no'" ``` 3. **启用防火墙限制**: ```bash ansible all -m iptables \ -a "chain=INPUT protocol=tcp destination_port=22 source=管理IP action=accept" ``` > **重要提示**:所有批量操作前建议使用`--check`模式测试[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弎肆兦㝋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值