【Linux】【shell】ssh互信脚本,亲测很实用
在Linux服务器的日常管理中,SSH互信是一个非常重要的功能,它允许我们无需输入密码即可在服务器之间进行安全访问。但是,手动设置SSH互信可能会非常繁琐,特别是当我们需要在多台服务器之间建立互信关系时。
我有一个项目,需要给77台centos7系统的虚拟机配置互信,但是一台一台配置,谁看了都脑袋疼。。。为了简化这个过程,我编写了一个自动化的SSH互信脚本,以下是脚本的详细内容和使用说明。
脚本功能
该脚本能够自动完成以下任务:
- 检查本地用户的默认SSH密钥对是否存在,如果不存在则自动生成。
- 读取用户指定的机器列表文件,每行一个主机地址。
- 为每台主机自动设置SSH互信,无需用户输入密码。
使用前提
-
确保已安装
sshpass
工具,用于自动输入SSH密码。没有这个工具的安装一下yum install sshpass
-
用户的
.ssh
目录中没有默认密钥对或允许脚本生成新的密钥对。
脚本内容
#!/bin/bash
# 读取机器列表
read -p "请输入机器列表文件路径(每行一个主机地址): " machines_file
# 获取当前用户的默认SSH密钥路径
default_private_key="$HOME/.ssh/id_rsa"
default_public_key="$default_private_key.pub"
# 检查并生成默认SSH密钥对
if [ ! -f "$default_private_key" ]; then
echo "默认SSH私钥不存在,程序将自动为您创建一个新的SSH密钥对。"
ssh-keygen -t rsa -b 2048 -f "$default_private_key" -N "" -q
fi
# 读取统一的SSH密码
read -s -p "请输入统一的SSH密码: " ssh_password
echo
# 遍历机器列表,复制公钥到每台主机
while IFS= read -r host
do
echo "正在设置与 $host 的SSH互信..."
sshpass -p "$ssh_password" ssh -o StrictHostKeyChecking=no "root@$host" << EOF
mkdir -p ~/.ssh
[ -f ~/.ssh/authorized_keys ] || touch ~/.ssh/authorized_keys
cat >> ~/.ssh/authorized_keys <<< "$(cat $default_public_key)"
EOF
if [ $? -eq 0 ]; then
echo "与 $host 的SSH互信设置成功"
else
echo "与 $host 的SSH互信设置失败,请检查是否能SSH访问 $host"
fi
done < "$machines_file"
echo "所有机器的SSH互信设置完成。"
使用步骤
- 准备机器列表文件:创建一个文本文件,每行包含一个要设置互信的服务器的地址。可以在脚本的同级目录创建一个host文件,执行时直接输入host
- 赋予脚本执行权限:在终端中运行
chmod +x ssh_trust_setup.sh
。 - 执行脚本:在终端中运行
./ssh_trust_setup.sh
并按照提示操作。
注意事项
- 脚本会自动检查并生成默认SSH密钥对,如果已存在则不会重复生成。
- 请确保所有目标服务器允许root用户SSH登录,并且SSH服务配置允许使用密码认证。
- 脚本里输入统一的密码,所以密码不一样的,请绕行。。
结语
通过这个脚本,我们可以大大简化SSH互信的设置过程,提高服务器管理的效率。