Linux多主机建立互信及集中管理

本文主要参考:Linux快速配置集群ssh互信

在对多个Linux主机进行管理,特别是如大规模数据库集群进行管理时,有必要同时向集群中的每个主机发送命令。当主机数量特别多的时候,一个一个来执行还是很麻烦的,所以有必要通过脚本来执行。本文就分享了这样的脚本。当然,针对这一场景,更强大的工具是ansible,具体可参考:ansible服务部署与使用

关于Linux建立多主机互信,可参考之前的博客:Centos系统下建立多机互信

配置节点1的/etc/hosts文件及环境变量

节点1编辑/etc/hosts文件,添加集群所有主机的IP地址和其对应的主机名:

192.168.56.102 node1
192.168.56.103 node2

配置节点1的环境变量:

vi ~/.bash_profile
export NODE_LIST='node1 node2'
source ~/.bash_profile
集群拷贝脚本与命令集中发送脚本

脚本1:用来集群间同步拷贝文件cluster_copy_all_nodes

#!/bin/bash
SELF=`hostname`
if [ -z "$NODE_LIST" ]; then
  echo
  echo Error: NODE_LIST environment variable must be set in .bash_profile
  exit 1
fi

for i in $NODE_LIST; do
  if [ ! $i = $SELF ]; then
    if [ $1 = "-r" ]; then
      scp -oStrictHostKeyChecking=no -r $2 $i:$3
    else
      scp -oStrictHostKeyChecking=no $1 $i:$2
    fi
  fi
done
wait

脚本2:用来集群间同步运行命令cluster_run_all_nodes

#!/bin/bash
if [ -z "$NODE_LIST" ]; then
  echo
  echo Error: NODE_LIST environment variable must be set in .bash_profile
  exit 1
fi

if [[ $1 = '--background' ]]; then
  shift
  for i in $NODE_LIST; do
    ssh -oStrictHostKeyChecking=no -n $i "$@" &
  done
else
  for i in $NODE_LIST; do
    ssh -oStrictHostKeyChecking=no $i "$@"
  done
fi
wait
配置整个集群间的ssh互信

1.在各节点通过ssh-keygen生成RSA密钥和公钥

cluster_run_all_nodes "hostname; ssh-keygen -q -t rsa  -N \"\" -f  ~/.ssh/id_rsa"

根据提示输入各主机密码。
2.将所有的公钥文件汇总到一个总的授权key文件中
在192.168.56.102执行汇总:
编辑脚本内容:

IP_NET="192.168.56."
for((i=102;i<=103;i++))
do
ssh $IP_NET$i cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
echo Summarize ssh info from $IP_NET$i into a single file.
done

注意:IP_NET是定义网段的变量,for循环包含了整个集群的IP范围,根据实际情况修改。
执行上面的这个脚本后,可以实现将所有的公钥文件汇总到node1。
3.将这个包含了所有互信机器认证key的认证文件,分发到各个机器中去

cluster_copy_all_nodes ~/.ssh/authorized_keys ~/.ssh/

根据提示输入各个主机的密码。自此,集群主机互信建立完成

验证ssh互信

节点1运行,都不输入密码返回主机名和时间即可:

cluster_run_all_nodes "hostname;date"

补充:
但为了更加灵活的再其他节点也可以用到我们自定义的脚本,我们还可以做以下工作:

同步拷贝节点1的配置文件到其他节点:

cluster_copy_all_nodes ~/.bash_profile ~/
cluster_copy_all_nodes /etc/hosts /etc
cluster_copy_all_nodes /usr/local/bin/cluster_copy_all_nodes /usr/local/bin/
cluster_copy_all_nodes /usr/local/bin/cluster_run_all_nodes /usr/local/bin/

这时任意登录其他节点,也可以使用cluster_run_all_nodes验证ssh互信了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值