Shell脚本实现服务器多台免密
简介
本脚本(auto_ssh_batch.sh)用于在多台主机之间快速配置SSH免密登录,并支持远程传输脚本/文件及执行命令。通过 pass 文件提供统一认证凭据,通过 nodes 文件定义目标主机列表,实现批量自动化操作。
下载
git clone https://gitee.com/wesley_li0/NoPassword.git
特别说明(公司):
使用非root用户需要创建用户并添加root组,并且配置信任的sudo权限,可以使用命令实现
USER : 用户名
PASSWORD:密码
USER=your_user && PASSWORD=your_password && useradd -m -G root -s /bin/bash "$USER" && echo "$USER:$PASSWORD" | chpasswd && echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USER
前提条件
- 操作系统:目标主机需为 RHEL/CentOS 7 系统(因依赖
sshpass-1.06-2.el7.x86_64.rpm)。 - 权限要求:
- 执行脚本的主机需具有root权限以安装
sshpass。 - 所有目标主机的SSH服务已启动,且防火墙允许SSH端口(默认22)通信。
- 所有主机用户名密码一致(免密完成后需改密码不影响免密)
- 执行脚本的主机需具有root权限以安装
文件准备:确保以下文件及目录结构存在:
/root/NoPassword/ # 脚本存放与用户家目录下
├── auto_ssh_batch.sh # 主执行脚本
├── bin
│ └── generate_ssh_key.sh # 待分发的远程执行脚本
├── config
│ └── nodes # 存储目标主机IP和节点ID
└── main
└── sshpass-1.06-2.el7.x86_64.rpm # sshpass安装包
配置文件格式
**nodes**** 文件**
每行定义一个目标主机的IP和节点ID (ID尽量与后续集群自动化脚本ID一致,若无执行集群脚本需求,ID自定义,仅作为输出机器标识使用),空格分隔:
IP_Address Node_ID User Password
示例:
192.168.1.10 1 root root123
192.168.1.11 2 root root123
脚本使用方法
SSH自定义端口
- SSH 端口指定,修改 `auto_ssh_batch.sh` 脚本中的`SSH_PORT`变量
- `SSH_PORT` 该变量用于指定 SSH 链接端口,默认 22
放置依赖文件
- 将 `sshpass` 的 RPM 包放入 `main/` 目录(默认已存在)。
- 确保 `generate_ssh_key.sh` 脚本位于 `bin/` 目录。
赋予执行权限,并执行脚本
sudo chmod +x auto_ssh_batch.sh
sudo sh auto_ssh_batch.sh
# 脚本运行结束后使用ssh验证
# 默认ssh端口
ssh username@ip
# 指定ssh端口
ssh -p xx username@ip
-------------------------脚本使用到此结束--------------------
脚本执行流程
- 文件检查
验证config/pass和config/nodes是否存在,格式是否正确。 - 初始化环境
- 生成本地SSH密钥对(如不存在)。
- 安装
sshpass(若未安装)。
- 批量操作
遍历nodes文件中的每个IP:- 分发公钥:使用
sshpass将公钥复制到目标主机,实现免密登录。 - 传输文件:将
generate_ssh_key.sh、pass、nodes、sshpass上传到目标主机的/tmp。 - 远程执行:在目标主机上运行
generate_ssh_key.sh。
- 分发公钥:使用
注意事项
- 安全性警告
- nodes 文件中密码以明文存储,建议仅在受信任环境使用。
- 脚本使用
-o StrictHostKeyChecking=no,自动信任主机密钥,可能存在中间人攻击风险。
- 错误处理
- 若某主机公钥分发失败,脚本会跳过该主机继续执行。
- 传输文件或远程命令失败时,查看错误输出并检查网络连通性。
- 日志输出
执行过程中会显示详细日志,包括成功/失败的主机IP及操作状态。
通过以上步骤,您可快速完成多主机SSH免密登录配置及批量远程操作。
Shell脚本实现服务器多台免密的更多相关文章
- 【Linux】服务器之间的免密登录脚本
在实际运维的过程中,经常需要用到免密登录,下面这个脚本实现服务器之间的免密登录,如下 比如,要实现A服务器与B.C.D服务器的免密登录,只需要将B.C.D服务器的IP地址写在serverlist.tx ...
- 多台centos7服务器实现SSH免密登陆
一.环境 centos7.x 三台 node1.node2.node3 二.实现免密登陆 2.1.node1上,生成公钥与私钥 [root@node1 ~]# ssh-keygen Generatin ...
- shell脚本批量配置多台主机静态ip
关于脚本 服务器使用之前,都需要先配置静态IP,那就将这种简单重复的工作,交给脚本来处理吧,让我们运维有更多的时间喝茶看报刷微博 脚本使用 sh ssh.sh ip.txt ssh.sh 为脚本的名称 ...
- Linux网络第四章:SSH远程管理及通过SSH实现服务器之间的免密连接
目录 一.SSH远程管理基础 1.ssh协议 2.ssh原理 3.配置文件解析 4.登录方法 5.使用ssh协议传输的命令 二.免密连接的实现 1.免密连接原理 2.免密实现环境准备 3.在客户端生成 ...
- Linux shell脚本判断服务器网络是否可以上网
Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需要有个函数来判断服务器网络状态 我们可以通过curl来访问 www ...
- Shell脚本分析服务器性能
概述 我们原先在服务器上想分析性能指标,需要执行一系列的linux命令.对于linux命令不熟悉的人来说,比较困难 现在有一套集成的shell脚本,把常用的linux命令都包含在里面,一键式分析性能瓶 ...
- 如何用shell脚本取出服务器图片
一 ,SHELL 是什么 (1)shell是一种命令行解释器. (2)是用户和Linux内核之间沟通的桥梁,属于中间件.见下图 (3)交互流程:shell接受用户输入的指令 =>将指令传达给Li ...
- shell 脚本实战笔记(8)--ssh免密码输入执行命令
前言: ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓 ...
- shell脚本查看服务器基本信息
#!/bin/sh #电脑概览 #电脑型号 ComputerModel=`/usr/bin/sudo /usr/sbin/dmidecode | grep -A2 "System Infor ...
- linux生成公钥私钥并上传到服务器上实现免密登陆
1. 生成密钥对 # -t 指定加密算法: -b 指定生成的密钥长度: -C 一句话,一般都填邮箱地址. # 更多参数说明可以在终端输入:ssh-keygen --help 查看 ssh-keygen ...
随机推荐
- [转]点云库PCL从入门到精通 随书源码(百度网盘下载)
分享给需要的人. 这里有你想要的东西-暗号-pdx6 相关链接: PCL点云数据处理基础️️️目录
- 【狂神说Java】Java零基础学习笔记-JavaSE总结
[狂神说Java]Java零基础学习笔记-JavaSE总结 JavaSE总结: -完结-撒花- [[狂神说Java]Java零基础学习视频通俗易懂]https://www.bilibili.com/v ...
- 16. C++快速入门--模板和Concept
待修改 1 定义模板 1.1 模板形参 模板参数 模板可以有两种参数, 一种是类型参数, 一种是非类型参数 这两种参数可以同时存在, 非类型参数 的类型 可以是 模板类型形参 template < ...
- JavaScript 数组展平方法: flat() 和 flatMap()
从 ES2019 中开始引入了一种扁平化数组的新方法,可以展平任何深度的数组. flat flat() 方法创建一个新数组,其中所有子数组元素以递归方式连接到特定深度. 语法:array.flat(d ...
- 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-11- 标签页(tab)操作 - 下篇 (详细教程)
1.简介 本来按照计划这一系列的文章应该介绍Context和Page两个内容的,但是宏哥看了官方文档和查找资料发现其实和宏哥在Python+Playwright系列文章中的大同小异,差不了多少,再在这 ...
- MySQL 开发规范
建表规约 1.[强制]每张表必须设置一个主键ID,并且这个主键ID要自增(在满足需要的情况下尽量短),除非是分库分表 理解:由于InnoDB存储引擎决定了需要有一个主键,而且这个主键ID是自增的话可以 ...
- Java虚拟机调优-垃圾回收算法-工具
背景: 垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对 ...
- w3cschool-Spring Security
https://www.w3cschool.cn/springsecurity/na1k1ihx.html Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤 ...
- 微信小程序如何更改appid
每一个吧小程序对应唯一一个appid; 但是在有些时候,我们需要更改appid; 点击详情,小程序右侧会出现下面的弹窗: 此时我们可以看见修改appid 这里修改了,才是真正的修改了: 这样我们上传微 ...
- react声明周期详解
react的生命周期,分为3三个阶段, 挂载阶段 constructor(){} UNSAFE_componentWillMount(){} == componentWillMount(在17版本中将 ...