Linux 批量配置互信

批量配置SSH互信脚本

bash 复制代码
#!/bin/bash

# 定义目标机器列表
machines=(
"192.168.122.87"
"192.168.122.89"
"192.168.122.90"
)
set -o errexit
# 设置默认的用户名和密码
default_username="root"
default_password="111111"


# 读取目标机器的用户名和密码
read -p "Enter username [$default_username]: " username
read -s -p "Enter password [$default_password]: " password
echo

# 使用默认值,如果没有输入用户名或密码
if [[ -z $username ]]; then
    username=$default_username
fi

if [[ -z $password ]]; then
    password=$default_password
fi


if command -v sshpass &> /dev/null
then
	echo "sshpass command is available"
else
	echo "sshpass command is not available"
	##### yum install 
	if [ -x /usr/bin/yum ]; then
		echo "Try to execute yum install.."
		yum -y install sshpass
	else
		echo "ERROR: An exception occurred during the installation of sshpass ! "
		exit -1
	fi
fi


function chk_ssh(){
	# ssh 公私钥路径
	ssh_dir="$HOME/.ssh"
	private_key="$ssh_dir/id_rsa"
	public_key="$ssh_dir/id_rsa.pub"
	
	# 检查~/.ssh目录是否存在
	if [ ! -d "$ssh_dir" ]; then
		mkdir -p "$ssh_dir"
	fi

	# 检查是否存在私钥和公钥文件
	if [ ! -f "$private_key" ] || [ ! -f "$public_key" ]; then
		# 生成密钥文件
		ssh-keygen -t rsa -b 2048 -N "" -q -f "$private_key"
		echo "Generated new SSH key pair: $private_key and $public_key"
	else
		echo "SSH key pair already exists: $private_key and $public_key"
	fi
}



# 循环遍历目标机器列表,判断主机是否有密钥
for machine in "${machines[@]}"
do
    echo "Configuring passwordless access for $machine"
    sshpass -p "$password" ssh -o StrictHostKeyChecking=no $username@$machine "bash -s" << EOF
# 将本地函数chk_ssh传递给远程服务器
$(declare -f chk_ssh)  
chk_ssh
EOF
done

# 循环遍历目标机器列表,获取公钥
rm -f /tmp/authorized_keys
for machine in "${machines[@]}"
do
    echo "Get the public key file in $machine to authorized keys"
    # sshpass -p "$password" ssh-copy-id -o StrictHostKeyChecking=no $username@$machine
	sshpass -p "$password" ssh -o StrictHostKeyChecking=no $username@$machine "cat ~/.ssh/id_rsa.pub " >> /tmp/authorized_keys
done

# 下发认证文件
for machine in "${machines[@]}"
do
    echo "Configuring passwordless access for $machine"
	sshpass -p "$password" scp -o StrictHostKeyChecking=no /tmp/authorized_keys $username@$machine:$HOME/.ssh
done

if [ $? == 0 ]
then
	echo "Passwordless access configured successfully for all machines."
	rm -f /tmp/authorized_keys
fi
相关推荐
tod1136 分钟前
力扣高频 SQL 50 题阶段总结(四)
开发语言·数据库·sql·算法·leetcode
VekiSon14 分钟前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
!chen17 分钟前
Redis快速实现布隆过滤器
数据库·redis·缓存
2301_7903009631 分钟前
数据分析与科学计算
jvm·数据库·python
zl_dfq40 分钟前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux
-XWB-42 分钟前
【Oracle】Oracle诊断系列(2/6):锁问题与阻塞分析——解决“卡住”的会话
数据库·oracle
cqsztech1 小时前
Oracle 26ai 2节点RAC 保姆级搭建步骤
数据库·oracle
Ankie Wan1 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
skywalk81631 小时前
尝试在openi启智社区的dcu环境安装ollama最新版0.15.2(失败)
linux·运维·服务器·ollama
TDengine (老段)1 小时前
金融风控系统中的实时数据库技术实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据