使用expect自动化完成集群SSH信任关系的建立

  1. 将以下脚本存成文件,并修改其权限
$ chmod 775 establish-ssh.sh
  1. 在同一目录下新建servers.txt文件,并填入相关IP
linyimin@:capra(master)$ cat servers.txt
192.168.121.10
192.168.121.11
192.168.121.12
192.168.121.13
192.168.121.14
192.168.121.15
  1. 执行establish-ssh.sh文件
$./establish-ssh.sh

脚本文件

#!/bin/bash
# The name who want to ssh without password
USER_UID=linyimin
# The System user home directory
USER_DIR=/home/linyimin
# Password of the other server user
USER_PASSWORD='password'

#################################### main #####################################
if [ -f servers.txt ]
then
  :
else
  echo
  echo "########### Please touch File: servers.txt ##########################"
  echo "########### servers.txt For example #################################"
  echo "########### 192.168.1.10 ############################################"
  exit 1
fi

# if expect is not installed then install it
dpkg --get-selections | grep -q expect
if [ $? -eq 0 ]
then
  :
else
  echo "########## Please install expect #####################################"
  exit 1
fi

# if id_rsa.pub not exist,
if [ -f $USER_DIR/.ssh/id_rsa.pub ]
then
  :
else
  expect -c "
  spawn ssh-keygen
  expect \"Enter file in which to save the key*\"
  send \"\r\"
  expect \"Enter passphrase*\"
  send \"\r\"
  expect \"Enter same passphraseagain:\"
  send \"\r\"
  "
fi
for SSH_IP in `cat servers.txt`
do
  echo "$SSH_IP"
  expect -c "
  spawn ssh-copy-id -i $USER_DIR/.ssh/id_rsa.pub $SSH_IP
  expect \"*yes/no*\"
  send \"yes\r\"
  expect \"*password*\"
  send \"${USER_PASSWORD}\"
  "
  if [ $? -eq 0 ]
  then
    echo "------------- $SSH_IP is ok. -----------------------"
  else
    echo "------------- $SSH_IP is fail ----------------------"
  fi
done

存在问题
在使用的时候发现IP对应的主机不存在的时候,打印的还是------------- $SSH_IP is ok. -----------------------
也就是expect命令执行完成之后$?始终是0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值