Linux主机双向互信脚本
引言
在现代的IT环境中,通常会有多台Linux主机构成的集群或分布式系统。在这些主机之间进行管理和协作时,经常需要进行SSH连接。为了简化管理和提高效率,配置主机之间的双向互信是一项重要的任务。
应用场景
配置Linux主机双向互信的应用场景广泛,以下是一些常见的应用场景:
- 自动化运维任务:在自动化运维任务中,经常需要通过SSH连接到多台主机并执行命令或脚本。配置双向互信可以使运维工程师在执行任务时免去输入密码的步骤,提高效率。
- 集群管理:在构建集群环境时,主机之间需要进行协调和通信。通过配置双向互信,可以方便地在集群中的各个节点之间进行SSH连接和操作。
- 分布式系统:分布式系统通常由多个节点组成,节点之间需要进行数据同步、协调和通信。通过配置双向互信,可以简化节点之间的认证过程,提高系统的可靠性和稳定性。
- 自动化部署:在自动化部署过程中,常常需要在多台主机上执行相同的部署脚本或命令。通过配置双向互信,可以方便地在各个主机之间进行部署操作,提高部署效率和一致性。
脚本实现
#!/bin/bash
# 主机列表
hosts=(
"user1@host1"
"user2@host2"
"user3@host3"
)
# 密码
password="password"
# 生成SSH密钥对
generate_ssh_key() {
local host=$1
local key_file=~/.ssh/id_rsa_$host
if [ ! -f $key_file ]; then
ssh-keygen -t rsa -f $key_file -N ""
fi
}
# 复制公钥到其他主机
copy_public_key() {
local host=$1
local key_file=~/.ssh/id_rsa_$host
for target_host in "${hosts[@]}"; do
if [[ $target_host != $host ]]; then
sshpass -p "$password" ssh-copy-id -i $key_file.pub $target_host
fi
done
}
# 设置双向互信
setup_ssh_trust() {
local host=$1
local key_file=~/.ssh/id_rsa_$host
for target_host in "${hosts[@]}"; do
if [[ $target_host != $host ]]; then
sshpass -p "$password" ssh -i $key_file $target_host "mkdir -p ~/.ssh && grep -qxF '$(cat $key_file.pub)' ~/.ssh/authorized_keys || echo '$(cat $key_file.pub)' >> ~/.ssh/authorized_keys"
fi
done
}
# 并行执行函数
parallel_execute() {
local func=$1
for host in "${hosts[@]}"; do
$func "$host" &
done
wait
}
# 并行生成SSH密钥对
parallel_execute generate_ssh_key
# 并行复制公钥到其他主机
parallel_execute copy_public_key
# 并行设置双向互信
parallel_execute setup_ssh_trust
echo "双向互信设置完成"
请确保在执行脚本之前,你已经正确设置了主机列表和密码,并且具备执行脚本的权限。另外,建议在执行脚本之前,确保主机之间可以正常通信,并且已经安装了sshpass和parallel-ssh工具,以便脚本顺利执行。
结束!如有不足之处,欢迎指正!
我们的组织在这里:
浙公网安备 33010602011771号