ssh免密码登录脚本

最近由于经常做实验需要使用ssh的免密码登录,参考网上的脚本做了一份
参考网址
http://blog.chinaunix.net/uid-20482996-id-3876431.html

#!/bin/bash

NUM_OF_NODES=2
NODE1="racnode1" 
NODE2="racnode2"

USER=oracle
EXPECT=`which expect`
PASSWD="oracle"
if [ "x$USER" = "xroot" ];then
   USER_PROMPT="*# "
else
   USER_PROMPT="*$ "
fi

if [ "x${NODE1}" == "x" -o "x${USER}" == "x" -o "x${PASSWD}" == "x" ]; then
    echo ""
    echo "Please set the NODE INFO, USER and PASSWD"
    echo "then $0 to start..."
    exit 1
fi
hn=`hostname`
if [ "x${hn}" != "x${NODE1}" ];then
   echo "Please login in ${NODE1},and run this shell"
   exit 1
fi


declare -i l_i=1
while [ $l_i -le $NUM_OF_NODES ]
do
    eval l_current_node=\$NODE$l_i

    $EXPECT <<EOF
    set timeout 1
    spawn ssh $USER@$l_current_node 
    expect "*(yes/no)*" {
        send -- "yes\r"
        expect "*?assword:*"
        send -- "$PASSWD\r"
    } "*?assword:*" {send -- "$PASSWD\r"}
    expect "$USER_PROMPT"
    send -- "ssh-keygen -t rsa -q -f ~/.ssh/id_rsa -P '' \r"
    expect "*Overwrite (yes/no)? " {
        send -- "yes\r"
    } "$USER_PROMPT" {send -- "\r"}
    expect "$USER_PROMPT"
    send -- "cat ~/.ssh/id_rsa.pub | ssh $USER@$NODE1 'cat - >> ~/.ssh/authorized_keys' \r"
    expect "*(yes/no)?*" {
        send -- "yes\r"
        expect "*?assword:*" 
        send -- "$PASSWD\r"
    } "*?assword:*" {send -- "$PASSWD\r"}
    expect "$USER_PROMPT"
    send -- "exit\r"
EOF
    ((l_i++))
done
echo "第一阶段"

declare -i l_n=1
while [ $l_n -le $NUM_OF_NODES ]
do
    eval l_current_node=\$NODE$l_n
    echo "当前节点数" $l_current_node
    $EXPECT <<EOF
    set timeout 1
    spawn ssh $USER@$NODE1
    expect "*?assword:*" {
        send -- "$PASSWD\r"
        expect "$USER_PROMPT"
    } "$USER_PROMPT" {send -- "scp ~/.ssh/authorized_keys $l_current_node:~/.ssh/ \r"}
    expect "$USER_PROMPT" {send -- "scp ~/.ssh/authorized_keys $l_current_node:~/.ssh/ \r"}
    expect "*?assword:*"
    send -- "$PASSWD\r"
    expect "$USER_PROMPT"
    send -- "exit\r"
EOF
    ((l_n++))
done
echo "第二阶段"

declare -i l_n=1
for ((l_i=1;l_i<=$NUM_OF_NODES;l_i++)); 
do
  #echo $l_i
  eval li_current_node=\$NODE$l_i
  #echo $li_current_node
  echo "本地节点数" $li_current_node
  ##循环编译执行ssh hname date
  for ((l_n=1;l_n<=$NUM_OF_NODES;l_n++));
  do
    #echo "ln=$l_n"
    eval ln_current_node=\$NODE$l_n
    echo "远端节点数" $ln_current_node
    $EXPECT <<EOF
    set timeout 1
    spawn ssh $USER@$li_current_node
    expect "*?assword:*" {
        send -- "$PASSWD\r"
        expect "$USER_PROMPT"
    } "$USER_PROMPT" {send -- "ssh $USER@$ln_current_node date \r"}
    expect "$USER_PROMPT" {send -- "ssh $USER@$ln_current_node date \r"}
    expect "*(yes/no)?*" {
        send -- "yes\r"
        expect "*?assword:*" 
        send -- "$PASSWD\r"
    } "*?assword:*" {send -- "$PASSWD\r"}
    expect "$USER_PROMPT"
    send -- "exit\r"
EOF
  done 
done

echo "第三阶段"

if [ $? == 0 ];then
   echo "Success"
else
        echo "Failed"
fi
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值