简介

本脚本(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

前提条件

  1. 操作系统:目标主机需为 RHEL/CentOS 7 系统(因依赖 sshpass-1.06-2.el7.x86_64.rpm)。
  2. 权限要求
    • 执行脚本的主机需具有root权限以安装 sshpass
    • 所有目标主机的SSH服务已启动,且防火墙允许SSH端口(默认22)通信。
    • 所有主机用户名密码一致(免密完成后需改密码不影响免密)

文件准备:确保以下文件及目录结构存在:

/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

-------------------------脚本使用到此结束--------------------


脚本执行流程

  1. 文件检查

    验证 config/passconfig/nodes 是否存在,格式是否正确。
  2. 初始化环境
    • 生成本地SSH密钥对(如不存在)。
    • 安装 sshpass(若未安装)。
  3. 批量操作

    遍历 nodes 文件中的每个IP:

    • 分发公钥:使用 sshpass 将公钥复制到目标主机,实现免密登录。
    • 传输文件:将 generate_ssh_key.shpassnodessshpass 上传到目标主机的 /tmp
    • 远程执行:在目标主机上运行 generate_ssh_key.sh

注意事项

  1. 安全性警告

    • nodes 文件中密码以明文存储,建议仅在受信任环境使用。
    • 脚本使用 -o StrictHostKeyChecking=no,自动信任主机密钥,可能存在中间人攻击风险。
  2. 错误处理
    • 若某主机公钥分发失败,脚本会跳过该主机继续执行。
    • 传输文件或远程命令失败时,查看错误输出并检查网络连通性。
  3. 日志输出

    执行过程中会显示详细日志,包括成功/失败的主机IP及操作状态。

通过以上步骤,您可快速完成多主机SSH免密登录配置及批量远程操作。

Shell脚本实现服务器多台免密的更多相关文章

  1. 【Linux】服务器之间的免密登录脚本

    在实际运维的过程中,经常需要用到免密登录,下面这个脚本实现服务器之间的免密登录,如下 比如,要实现A服务器与B.C.D服务器的免密登录,只需要将B.C.D服务器的IP地址写在serverlist.tx ...

  2. 多台centos7服务器实现SSH免密登陆

    一.环境 centos7.x 三台 node1.node2.node3 二.实现免密登陆 2.1.node1上,生成公钥与私钥 [root@node1 ~]# ssh-keygen Generatin ...

  3. shell脚本批量配置多台主机静态ip

    关于脚本 服务器使用之前,都需要先配置静态IP,那就将这种简单重复的工作,交给脚本来处理吧,让我们运维有更多的时间喝茶看报刷微博 脚本使用 sh ssh.sh ip.txt ssh.sh 为脚本的名称 ...

  4. Linux网络第四章:SSH远程管理及通过SSH实现服务器之间的免密连接

    目录 一.SSH远程管理基础 1.ssh协议 2.ssh原理 3.配置文件解析 4.登录方法 5.使用ssh协议传输的命令 二.免密连接的实现 1.免密连接原理 2.免密实现环境准备 3.在客户端生成 ...

  5. Linux shell脚本判断服务器网络是否可以上网

    Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需要有个函数来判断服务器网络状态 我们可以通过curl来访问 www ...

  6. Shell脚本分析服务器性能

    概述 我们原先在服务器上想分析性能指标,需要执行一系列的linux命令.对于linux命令不熟悉的人来说,比较困难 现在有一套集成的shell脚本,把常用的linux命令都包含在里面,一键式分析性能瓶 ...

  7. 如何用shell脚本取出服务器图片

    一 ,SHELL 是什么 (1)shell是一种命令行解释器. (2)是用户和Linux内核之间沟通的桥梁,属于中间件.见下图 (3)交互流程:shell接受用户输入的指令 =>将指令传达给Li ...

  8. shell 脚本实战笔记(8)--ssh免密码输入执行命令

    前言: ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓 ...

  9. shell脚本查看服务器基本信息

    #!/bin/sh #电脑概览 #电脑型号 ComputerModel=`/usr/bin/sudo /usr/sbin/dmidecode | grep -A2 "System Infor ...

  10. linux生成公钥私钥并上传到服务器上实现免密登陆

    1. 生成密钥对 # -t 指定加密算法: -b 指定生成的密钥长度: -C 一句话,一般都填邮箱地址. # 更多参数说明可以在终端输入:ssh-keygen --help 查看 ssh-keygen ...

随机推荐

  1. [转]点云库PCL从入门到精通 随书源码(百度网盘下载)

    分享给需要的人. 这里有你想要的东西-暗号-pdx6 相关链接: PCL点云数据处理基础️️️目录

  2. 【狂神说Java】Java零基础学习笔记-JavaSE总结

    [狂神说Java]Java零基础学习笔记-JavaSE总结 JavaSE总结: -完结-撒花- [[狂神说Java]Java零基础学习视频通俗易懂]https://www.bilibili.com/v ...

  3. 16. C++快速入门--模板和Concept

    待修改 1 定义模板 1.1 模板形参 模板参数 模板可以有两种参数, 一种是类型参数, 一种是非类型参数 这两种参数可以同时存在, 非类型参数 的类型 可以是 模板类型形参 template < ...

  4. JavaScript 数组展平方法: flat() 和 flatMap()

    从 ES2019 中开始引入了一种扁平化数组的新方法,可以展平任何深度的数组. flat flat() 方法创建一个新数组,其中所有子数组元素以递归方式连接到特定深度. 语法:array.flat(d ...

  5. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-11- 标签页(tab)操作 - 下篇 (详细教程)

    1.简介 本来按照计划这一系列的文章应该介绍Context和Page两个内容的,但是宏哥看了官方文档和查找资料发现其实和宏哥在Python+Playwright系列文章中的大同小异,差不了多少,再在这 ...

  6. MySQL 开发规范

    建表规约 1.[强制]每张表必须设置一个主键ID,并且这个主键ID要自增(在满足需要的情况下尽量短),除非是分库分表 理解:由于InnoDB存储引擎决定了需要有一个主键,而且这个主键ID是自增的话可以 ...

  7. Java虚拟机调优-垃圾回收算法-工具

    背景: 垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对 ...

  8. w3cschool-Spring Security

    https://www.w3cschool.cn/springsecurity/na1k1ihx.html Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤 ...

  9. 微信小程序如何更改appid

    每一个吧小程序对应唯一一个appid; 但是在有些时候,我们需要更改appid; 点击详情,小程序右侧会出现下面的弹窗: 此时我们可以看见修改appid 这里修改了,才是真正的修改了: 这样我们上传微 ...

  10. react声明周期详解

    react的生命周期,分为3三个阶段, 挂载阶段 constructor(){} UNSAFE_componentWillMount(){} == componentWillMount(在17版本中将 ...