一个配置集群ssh互信的shell脚本

shell互信脚本


#!/bin/sh

## 1 delete .ssh directory
UserName="mongodb"
rm -rf ~/.ssh
ssh-keygen -t rsa
ssh-keygen -t dsa

startnode=7
endnode=7

for ((i=${startnode}; i<=${endnode}; i++));
do
        ssh  $UserName@node$i 'rm -rf ~/.ssh; ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "";exit '     
        ssh $UserName Node$i 'rm -rf ~/.ssh;ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "";exit'
done;

# 2 copy public keys to one file
#ssh $UserName@node1
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
for ((i=${startnode}; i<=${endnode}; i++));
do
        ssh $UserName@node$i cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys    
        ssh $UserName@node$i cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
done;

# 3 Dispath authorized_keys to other machines and change file property
chmod 600 ~/.ssh/authorized_keys
for ((i=${startnode};i<=${endnode};i++));
do
        scp ~/.ssh/authorized_keys $UserName@node$i:~/.ssh/
        ssh $UserName@node$i 'chmod 600 ~/.ssh/authorized_keys'
done;

说明

  • 脚本执行的步骤
    • 第一步 在各个主机上生成key;
    • 第二步 将各个主机上的的公钥拷贝到执行命令的主机的 authorized_keys中;
    • 第三步 将authorized_keys 分发到其他主机;
    • 第四步 修改authorized_keys的访问权限为600.
  • UserName对应的是主机名称;
  • ssh-keygen -t rsa 和ssh-keygen -t dsa 产生两种加密密钥,当然也可以只使用其中一种;
  • startnode和endnode表示节点IP的范围,如从192.168.2.150到192.168.2.159时,startnode=1, endnode=9,只需要在192.168.2.150的主机上执行该脚本即可;
  • ssh username@hostname cmd 登录到远程主机执行cmd命令,若需要执行多条命令,需要写成,’cmd;cmd;cmd’
  • 该脚本目前的功能还比较弱小,如ip的范围必须连续,主机名的前缀必须相同,但对于搭建个小集群,配置主机互信基本够用了,当然欢迎大家一起讨论,后面有时间在继续更新完善。

你可能感兴趣的:(linux)