1. 程式人生 > 其它 >批量設定ssh無密碼登陸指令碼

批量設定ssh無密碼登陸指令碼

最近要給叢集設定ssh無密碼登陸,如果需要手動設定這個無密碼登陸,所以在網上找了幾個指令碼,親測下面這個好使,並且設定比較簡單。

需要用root賬戶執行,我也是要給root賬戶設定無密碼登陸。

首先我們要建立密碼,執行下面這句命令:

ssh-keygen -t rsa

指令碼如下:我們僅僅需要修改的就是node=()裡面的主機名就可以了,當前前提是你必須在/etc/hosts 配置了。

#!/bin/bash
node=(hadoop.Master hadoop.SlaveT1 hadoop.SlaveT2)  # hostname for each node
username=root            # username to be interconnected
homename=$username        # home dir, i.e. home/zhangyang
if [ "$username" = "root" ];
then
        homename=root
else
        homename=home/$username
fi

for((i=0; i<${#node[*]}; i++))
do
        ssh $username@${node[i]} 'ssh-keygen -t rsa; chmod 755 ~/.ssh'
done
#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

echo "batch authorized_keys created..."
echo "start scp..."

#scp node003:/$homename/.ssh/authorized_keys /$homename/.ssh/node003.key
for((i=0; i<${#node[*]}; i++))
do
        scp ${node[i]}:/$homename/.ssh/id_rsa.pub /$homename/.ssh/${node[i]}.key
        echo "scp from ${node[i]} finished..."
done

echo "append key to authorized_keys..."
for((i=0; i<${#node[*]}; i++))
do
        cat /$homename/.ssh/${node[i]}.key >> /$homename/.ssh/authorized_keys
        echo "append ${node[i]}.key finished..."
done

echo "append all key finished..."
loop=${#node[*]}
let subloop=loop-1
echo "starting scp complete authorized_keys to ${node[1]}~${node[subloop]}"
for((i=1; i<${#node[*]}; i++))
do
        scp /$homename/.ssh/authorized_keys ${node[i]}:/$homename/.ssh/authorized_keys
        echo "scp to ${node[i]} finished..."
done
echo "scp all nodes finished..."

# delete intermediate files
rm -rf /$homename/.ssh/*.key
echo "all configuration finished..."

然後給指令碼授予執行的許可權 chmod +x  batchSSH.sh

然後執行./batchSSh.sh

當然這個指令碼也有缺陷,它需要自己手動輸入密碼,如果節點多的話,還是很痛苦的,不過還好啦,比起自己手動搞的話,好多了,誰叫我不懂shell呢,哈哈!