Linux互信一键配置脚本-多功能版

举报
阿贤Linux 发表于 2025/08/13 21:40:05 2025/08/13
【摘要】 Linux互信一键配置脚本-多功能版Linux互信一键配置脚本-多功能版应广大网友要求,更新一篇多功能版本的互信脚本。Linux互信(SSH互信)是通过 SSH密钥认证实现两台或多台Linux服务器之间的无密码登录,主要用于自动化部署、集群管理和系统维护等场景。新加功能由于服务器账号密码可能不统一,脚本添加区分账号密码功能。支持从文件读取服务器信息,如果服务器数量过多可使用此功能。#!/bi...

Linux互信一键配置脚本-多功能版

应广大网友要求,更新一篇多功能版本的互信脚本。

Linux互信(SSH互信)是通过 SSH密钥认证实现两台或多台Linux服务器之间的无密码登录,主要用于自动化部署、集群管理和系统维护等场景。

新加功能

  • 由于服务器账号密码可能不统一,脚本添加区分账号密码功能。

  • 支持从文件读取服务器信息,如果服务器数量过多可使用此功能。

#!/bin/bash

echo -e "\e[31m友情提示:此脚本共用私钥,存在安全风险,生产环境勿用!!!\e[0m"

OS=`awk -F'"' '/PRETTY_NAME/{print $2}' /etc/os-release|tr ' ' '-'`

# 配置统一密码(改为自己的服务器密码)
export SSHPASS=waluna

# 服务器密码文件名
SVR_FILE="svr_info.txt"

# 注意:IPLIST 和 SVR_LIST 只能填写一处,建议注释或删掉!!!
# 记得填写本机IP!!!
# IP列表
#IPLIST="10.0.0.9
#10.0.0.19
#10.0.0.29"

# 服务器信息(格式:IP 用户 密码)
SVR_LIST="10.0.0.9 root waluna
10.0.0.19 luna waluna01
10.0.0.29 admin admin123
10.0.0.39 ubuntu admin"

# 安装sshpass
if [[ $OS == CentOS* ]];then
  rpm -q sshpass || {
   if yum install sshpass -y; then
       echo -e "\e[32;1m sshpass已经安装\e[0m"
   else
       echo -e "\e[31;1m sshpass安装失败,请检查网络或源配置\e[0m"
       exit 7
   fi
  }
elif [[ $OS == Ubuntu* ]];then
  dpkg -s sshpass || {
   if apt install sshpass -y; then
       echo -e "\e[32;1m sshpass已经安装\e[0m"
   else
       echo -e "\e[31;1m sshpass安装失败,请检查网络或源配置\e[0m"
       exit 7
   fi
  }
else
   echo -e "\e[31m不支持此系统\e[0m"
   exit 7
fi

# 生成本机密钥
if [ ! -f ~/.ssh/id_rsa ]; then
  ssh-keygen -f ~/.ssh/id_rsa -P ''
fi

# 用户密码统一
loop_for() {
   # 配置互信并拷贝密钥
   for IP in $1; do
      sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $IP
      scp -o StrictHostKeyChecking=no ~/.ssh/id_rsa $IP:~/.ssh/
       if [ $? -eq 0 ]; then
           echo -e "\e[32;1m $IP 互信配置完成!\e[0m"
       else
           echo -e "\e[31m 请检查脚本配置\e[0m"
       fi
   done
}

# 用户密码不统一
loop_while() {
   echo "$1" | while read -r IP USER PASS; do
      sshpass -p "$PASS" ssh-copy-id -o StrictHostKeyChecking=no "$USER"@"$IP"
      scp -o StrictHostKeyChecking=no ~/.ssh/id_rsa "$USER"@"$IP":~/.ssh/
       if [ $? -eq 0 ]; then
           echo -e "\e[32;1m $IP 互信配置完成!\e[0m"
       else
           echo -e "\e[31m 请检查脚本配置\e[0m"
       fi
   done
}

# 判读采用变量还是文件
if [ ! -f $SVR_FILE ]; then
   if [ -n "$IPLIST" ] && [ -z "$SVR_LIST" ]; then
      loop_for "$IPLIST"
   elif [ -n "$SVR_LIST" ] && [ -z "$IPLIST" ]; then
      loop_while "$SVR_LIST"
   else
       echo -e "\e[31m请按要求填写,IPLIST 和 SVR_LIST 只能填写一出\e[0m"
       exit 7
   fi
else
   NUM=$(head -1 "$SVR_FILE" | awk '{print NF}')
   if [ $NUM -eq 1 ]; then
      loop_for "$(cat "$SVR_FILE")"
   elif [ $NUM -eq 3 ]; then
      loop_while "$(cat "$SVR_FILE")"
   else
       echo -e "\e[31m请检查服务器信息\e[0m"
       exit 7
   fi
fi

友情提示:此脚本共用私钥,存在安全风险,生产环境勿用!

此脚本实现方式是在本机生成一个密钥对,将公钥分发至各服务器,再将私钥拷贝到各服务器,以此实现各个服务器实现的相互通信。

如果不想使用sshpass也可以使用expect,但是expect不支持一些特殊符号,有局限性,大家可以自行选择。



关于我
全网可搜《阿贤Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、阿里云、腾讯云、华为云、今日头条、百家号、GitHub、个人博客
公众号:阿贤Linux
个人博客:blog.waluna.top


原文链接: Linux互信一键配置脚本-多功能版. blog.waluna.top/2025/08/13/1427/

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。