Linux主机双向互信脚本

引言

在现代的IT环境中,通常会有多台Linux主机构成的集群或分布式系统。在这些主机之间进行管理和协作时,经常需要进行SSH连接。为了简化管理和提高效率,配置主机之间的双向互信是一项重要的任务。

应用场景

配置Linux主机双向互信的应用场景广泛,以下是一些常见的应用场景:

  1. 自动化运维任务:在自动化运维任务中,经常需要通过SSH连接到多台主机并执行命令或脚本。配置双向互信可以使运维工程师在执行任务时免去输入密码的步骤,提高效率。
  2. 集群管理:在构建集群环境时,主机之间需要进行协调和通信。通过配置双向互信,可以方便地在集群中的各个节点之间进行SSH连接和操作。
  3. 分布式系统:分布式系统通常由多个节点组成,节点之间需要进行数据同步、协调和通信。通过配置双向互信,可以简化节点之间的认证过程,提高系统的可靠性和稳定性。
  4. 自动化部署:在自动化部署过程中,常常需要在多台主机上执行相同的部署脚本或命令。通过配置双向互信,可以方便地在各个主机之间进行部署操作,提高部署效率和一致性。

脚本实现

#!/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工具,以便脚本顺利执行。

结束!如有不足之处,欢迎指正!

我们的组织在这里:

posted @ 2023-08-07 09:50  寻梦99  阅读(253)  评论(0)    收藏  举报