SSH批量管理 expect自动交互

Posted Elvin笔记分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH批量管理 expect自动交互相关的知识,希望对你有一定的参考价值。

SSH批量管理
 expect自动交互

 原创博文http://www.cnblogs.com/elvi/p/7662908.html

# SSH批量管理
# expect自动交互


#############################
#!/bin/sh
# 初次使用,以root批量执行

CMD=(
date
uname -r
hostname
)

sh ${[*]}

. /etc/init.d/functions
[[ -f /usr/bin/expect ]] || { echo "install expect";yum install expect -y; } #若没expect则安装
##########


#############################
# #SSH批量执行shell命令
#!/bin/sh
. /etc/init.d/functions
[[ $# == 0 ]] && { echo \'ege: /bin/sh \'$0\' "命令1;命令2"\';exit; }
for n in 81 82 83
do
  echo  
  ssh -p22 192.168.20.$n $*
  [[ $? == 0 ]] && action "========IP:192.168.20.$n========" /bin/true || action "========IP:192.168.20.$n========" /bin/false
done
##########



#############################
###批量推送文件
#!/bin/sh
. /etc/init.d/functions
[[ $# == 0 ]] && { echo \'ege: /bin/sh \'$0\' "本地文件" "(远程)目录"\';exit; }
for n in 81 82 83
do
  scp -P22 $1 sshync@192.168.20.$n ~/ >/dev/null 2>&1 &&\\
  ssh -p22 -t sshync@192.168.20.$n sudo rsync ~/$1 $2 >/dev/null 2>&1
  [[ $? == 0 ]] && action "========IP:192.168.20.$n" /bin/true || action "========IP:192.168.20.$n" /bin/false
done
##########

#############################
#!/bin/sh
# 批量分发SSHKEY

. /etc/init.d/functions
[[ -f /usr/bin/expect ]] || { echo "install expect";yum install expect -y; } #若没expect则安装

PUB=/`whoami`/.ssh/id_dsa.pub
[[ -f $PUB ]] || { ssh-keygen -t dsa -P \'\' -f /`whoami`/.ssh/id_dsa>/dev/null 2>&1; } #若没公钥则生成

USER=sshync
PASS=sshync
# IP : SIP + SIP_end
SIP=192.168.20.
SIP_end=(41 47 43)

#expect自动交互
function EXP() {
/usr/bin/expect << EOF
set timeout 1
spawn ssh-copy-id -i $PUB "-p22 $USER@$SIP$n"
expect {
        "yes/no" { send "yes\\r";exp_continue }
        "password:" { send "$PASS\\n";exp_continue } 
        eof { exit }
        }
EOF
}
#
[[ $1 == y ]] || { echo -e \'ege: /bin/sh \'$0\' y \\n    当前\'`whoami`\'用户向远程用户\'$USER\'分发SSHKEY \\n    远程主机列表\'$SIP\'\'${SIP_end[*]}\' \\n\';exit; }

for n in ${SIP_end[*]}
do
  EXP |grep \'.ssh/authorized_keys\'>/dev/null 2>&1
  [[ $? == 0 ]] && action "========IP:192.168.20.$n" /bin/true || action "========IP:192.168.20.$n" /bin/false
done


#############################
#!/bin/sh
#Made by elven,2017
# MariaDB初始化,设置密码

DBPass=db2017
[[ -f /usr/bin/expect ]] || { echo "install expect";yum install expect -y; } #若没expect则安装
/usr/bin/expect << EOF
set timeout 30
spawn mysql_secure_installation
expect {
    "enter for none" { send "\\r"; exp_continue}
    "Y/n" { send "Y\\r" ; exp_continue}
    "password:" { send "$DBPass\\r"; exp_continue}
    "new password:" { send "$DBPass\\r"; exp_continue}
    "Y/n" { send "Y\\r" ; exp_continue}
    eof { exit }
}
EOF
#测试
mysql -u root -p$DBPass -e "show databases;"
#############################

 

以上是关于SSH批量管理 expect自动交互的主要内容,如果未能解决你的问题,请参考以下文章

通过expect的自动交互实现ssh公钥批量下发

shell 脚本交互模式expect批量上传ssh密钥

系统批量运维管理器pexpect详解

推送文件(expect交互式方式与sshpass非交互式方式)

推送文件(expect交互式方式与sshpass非交互式方式)

Linux之expect非交互式功能