当前位置: 首页 > news >正文

linux 如何给服务器批量做免密,如何批量挂在磁盘

前提条件

所有机器网络互通,且已做了免密登录

linux服务器批量做免密脚本如下

#!/bin/bash

# 定义服务器列表文件
SERVERS_FILE="host"

# 定义生成的密钥的存储目录
KEY_DIR="/root/.ssh"

# 检查是否输入了文件路径
if [ $# -ne 1 ]; then
    echo "使用方法: $0 <服务器列表文件>"
    exit 1
fi

# 检查服务器列表文件是否存在
if [ ! -f $1 ]; then
    echo "错误: $1 文件不存在"
    exit 1
fi

# 主循环
while read server; do
    ip=$(echo$server | awk '{print $1}')
    user=$(echo$server | awk '{print $2}')
    port=$(echo$server | awk '{print $3}')

    # 检查IP地址是否合法
    if [[ ! $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        echo "错误: $ip 不是一个合法的IP地址"
        continue
    fi

    # 检查端口是否合法
    if [[ ! $port =~ ^[0-9]+$ ]]; then
        echo "错误: $port 不是一个合法的端口"
        continue
    fi

    # 为当前服务器生成密钥
    echo "正在为$ip生成SSH密钥..."
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f $KEY_DIR/id_rsa_$ip -N "" &> /dev/null

    # 检查是否生成成功
    if [ $? -ne 0 ]; then
        echo "错误: 密钥生成失败"
        exit 1
    fi

    # 将公钥复制到其他服务器
    for other_server in $(cat$SERVERS_FILE); do
        other_ip=$(echo$other_server | awk '{print $1}')
        other_user=$(echo$other_server | awk '{print $2}')
        other_port=$(echo$other_server | awk '{print $3}')

        # 跳过当前服务器
        if [ $ip ==$other_ip ]; then
            continue
        fi

        echo "正在将公钥复制到$other_ip..."
        ssh -p $other_port$other_user@$other_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" <$KEY_DIR/id_rsa_$ip.pub &> /dev/null

        # 检查是否复制成功
        if [ $? -ne 0 ]; then
            echo "错误: 无法向$other_ip复制公钥"
        else
            echo "成功: 向$other_ip复制公钥"
        fi
    done
done < $1

echo "完成!所有机器已经设置互相免密登录。"

1、将脚本保存为setup_ssh_keys_ mutual.sh。
2、给脚本执行权限:chmod +x setup_ssh_keys_ mutual.sh。
3、执行脚本,传入服务器列表文件路径:./setup_ssh_keys_ mutual.sh host。

方案:
第一步、找到所要挂在的主机列表,写到某个文件中,我这写到我自己创建的host文件了
第二步、明确挂在磁盘虚要哪些命令

1、创建磁盘挂载目录

2、创建文件系统

3、将磁盘挂载到指定目录

4、将挂载的磁盘写到开机自启文件

第三步、明确命令后,开始编写脚本

linux服务器批量挂载磁盘,首先需要遍历需要挂载磁盘的主机。我这里用的是for循环

创建脚本文件

#!/bin/bash

for i in `cat host`;do ' ssh $i;  mkdir /data; mkfs.ext4 /dev/vdb;mount /dev/vdb /data;echo "/dev/vdb /data  ext4  defaults 1 1">>/etc/fstab';done

注意点,命令与命令之间用‘ ;’隔开, 且命令需用单引号引起来,表示我们执行的是可执行命令

http://www.lryc.cn/news/307992.html

相关文章:

  • Android Activity的生命周期详解
  • python学习笔记-内置类型
  • 校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码
  • 如何在 Angular 中使用 NgTemplateOutlet 创建可重用组件
  • 改进的yolo交通标志tt100k数据集目标检测(代码+原理+毕设可用)
  • nginx 日志,压缩,https功能介绍
  • 代码随想录三刷day17
  • postcss-px-to-viewport include属性
  • C++设计模式——抽象工厂模式
  • Windows安装VNC连接工具并结合cpolar实现远程内网Ubuntu系统桌面
  • Vue3 Hooks函数使用及封装思想
  • YOLOv8改进涨点,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)
  • 华为s5720s-28p-power-li-ac堆叠配置
  • c# aes加密解密私钥公钥通钥
  • 上拉电阻与下拉电阻、电容的作用
  • 《Spring Security 简易速速上手小册》第1章 Spring Security 概述(2024 最新版)
  • vue页面菜单权限问题解决
  • C++面试宝典第33题:数组组成最大数
  • “影像承载初心” 国际数字影像产业园2024首届摄影沙龙诚邀您的参与!
  • 【C语言】while循环语句
  • 2024数字中国创新大赛·数据要素赛道“能源大数据应用赛”正式上线!参赛指南请查收
  • react-JSX基本使用
  • 学习阶段单片机买esp32还是stm32?
  • 【Simulink系列】——Simulink子系统子系统封装模块库技术
  • 一加手机线刷2024版,param预载失败/MSM刷机工具报错
  • 文件拖放到窗体事件
  • JAVA集成微信支付V3版JSAPI下单
  • opengles 背面剔除介绍(十二)
  • 【深度学习:视频注释】如何为机器学习自动执行视频注释
  • 网络编程、UDP、TCP