前提条件
所有机器网络互通,且已做了免密登录
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
注意点,命令与命令之间用‘ ;’隔开, 且命令需用单引号引起来,表示我们执行的是可执行命令