Linux/Unix shell内嵌expect自动配置多台主机SSH互信

在自动化测试,或者Oracle RAC安装过程中,需要配置主机之间SSH 无密码访问,当有多台主机时,配置起来很麻烦,网上的很多类似脚本拿到本机有问题,所以自己写了一个:
   

  1. #!/bin/bash

  2. NUM_OF_NODES= 
  3. NODE1="" 
  4. NODE2=""
  5. NODE3=""
  6. NODE4=""
  7. NODE5=""

  8. USER=root
  9. EXPECT=/usr/bin/expect
  10. PASSWD=""
  11. #USER_PROMPT="*$ "
  12. USER_PROMPT="*# "

  13. if [ "x${NODE1}" == "x" -"x${USER}" == "x" -"x${PASSWD}" == "x" ]; then
  14.     echo ""
  15.     echo "Please set the NODE INFO, USER and PASSWD"
  16.     echo "then $0 to start..."
  17.     exit 1
  18. fi

  19. declare -i l_i=1
  20. while [ $l_i -le $NUM_OF_NODES ]
  21. do
  22.     eval l_current_node=\$NODE$l_i
  23.     
  24.     $EXPECT <<EOF
  25.     spawn ssh $USER@$l_current_node 
  26.     expect "*(yes/no)?*" {
  27.         send -- "yes\r"
  28.         expect "*?assword:*"
  29.         send -- "$PASSWD\r"
  30.     } "*?assword:*" {send -- "$PASSWD\r"}
  31.     expect "$USER_PROMPT"
  32.     send -- "ssh-keygen -t rsa -q -f ~/.ssh/id_rsa -P '' \r"
  33.     expect "*Overwrite (yes/no)? " {
  34.         send -- "yes\r"
  35.     } "$USER_PROMPT" {send -- "\r"}
  36.     expect "$USER_PROMPT"
  37.     send -- "cat ~/.ssh/id_rsa.pub | ssh $USER@$NODE1 'cat - >> ~/.ssh/authorized_keys' \r"
  38.     expect "*(yes/no)?*" {
  39.         send -- "yes\r"
  40.         expect "*?assword:*" 
  41.         send -- "$PASSWD\r"
  42.     } "*?assword:*" {send -- "$PASSWD\r"}
  43.     expect "$USER_PROMPT"
  44.     send -- "exit\r"
  45. EOF
  46.     ((l_i++))
  47. done

  48. declare -i l_n=1
  49. while [ $l_n -le $NUM_OF_NODES ]
  50. do
  51.     eval l_current_node=\$NODE$l_n
  52.     $EXPECT <<EOF

  53.     spawn ssh $USER@$NODE1
  54.     expect "*?assword:*" {
  55.         send -- "$PASSWD\r"
  56.         expect "$USER_PROMPT"
  57.     } "$USER_PROMPT" {send -- "scp ~/.ssh/authorized_keys $l_current_node:~/.ssh/ \r"}
  58.     expect "*?assword:*"
  59.     send -- "$PASSWD\r"
  60.     expect "$USER_PROMPT"
  61.     send -- "exit\r"
  62. EOF
  63.     ((l_n++))
  64. done

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20482996/viewspace-1127298/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20482996/viewspace-1127298/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值