一、用以下expect脚本可以同时对200台机器执行同一个命令,
比如:打补丁(expect remote.exp)
#!/user/bin/expect -f
for {set i 1} {$i<=200} {incr i} {
spawn ssh -p 1022 -l root 192.168.6.$i
expect "*password: "
sleep 3
send "123456\r"
expect "username\r"
send "su -\r" #SSH普通用户名密码登录
expect "Password:"
send "123456\r" #SSH的root用户名密码登录
expect -timeout 1
expect "root"
#send "find / -name sambafeng.txt\r"
send "patch -R -p1 patching file prj0name\r"
#interact 中断调试
}
二、用ssh密钥方式
#!/bin/bash
#============author sambafeng===================
#==============INIT=============================
deployDir=/opt/fordeploy
backup=/opt/backup
scriptDir=/opt/script
#=============IP Partten=================================================
#url="$1"
#url_1=${url//\\//}
#url_2=${url_1#*94}
#dir="/opt/share"$url_2
#appname=$(ls -l ${dir}/|grep "\."|awk '{printf $9 "\n"}')
#cp $dir/$appname $deployDir
#=============eli the version====================
x=0
for filename in $deployDir/*;
do
fullname=$(basename $filename)
p_name=$(echo $fullname|awk -F "-[0-9]" '{print $1}'|awk -F "-stage2" '{print $1}'|awk -F "." '{print $1}')
p_type=$(echo $fullname| rev | cut -c 1-3 | rev)
PackageName="$p_name"."$p_type"
mv -f $deployDir/$fullname $deployDir/$PackageName
array[$x]=$PackageName
let x+=1
done
#===============Remote deploy===================================================
echo "please select the package for deploy"
select var in ${array[@]}
do
for n in $(cat /opt/script/map.properties |grep "${var}")
do
list=($(echo $n | awk -F',' '{printf("%s %s %s %s",$1,$2,$3,$4)}'))
echo "==PackageName:${list[0]}==serverIp:${list[1]}==NodeName:${list[2]}==appName:${list[3]}========"
echo -n "Are sure begin deploy?(Y/N)"
read YES_OR_NO
case $YES_OR_NO in
y|Y|yes|YES)
scp $deployDir/${list[0]} oracle@${list[1]}:$deployDir
ssh ${list[1]} "sh $scriptDir/redeploy.sh ${list[2]} ${list[3]} ${list[0]};exit;"
;;
n|N|no|NO)
echo "canceled"
;;
*)
echo "Error ,you should input[Y|N]"
exit 1
;;
esac
done
rm -f $deployDir/${list[0]}
echo "$var deploy finished"
done
三、python实现ssh批量登陆执行命令
#!/usr/bin/env python
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret
#!/usr/bin/python
import paramiko
import threading
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
for m in cmd:
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y") #简单交互,输入 ‘Y’
out = stdout.readlines()
#屏幕输出
for o in out:
print o,
print '%s\tOK\n'%(ip)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
cmd = ['cal','echo hello!']#你要执行的命令列表
username = "" #用户名
passwd = "" #密码
threads = [] #多线程
print "Begin......"
for i in range(1,254):
ip = '192.168.1.'+str(i)
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()
分享到:
相关推荐
expect+tcl工具大合集,用于远程登陆到另外一台linux机器(大家都用的起)。
linux下交互式命令expect使用方法
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信
工作中需要对几十台服务器做互信,无意中发现expect命令,研究一番。 expect命令在自动交互中很好用。 压缩包包含安装步骤,安装包,以及 自动互信脚本。
本篇文章给大家介绍在Linux中使用expect脚本实现远程机器自动登录,前提是要创建一个expec脚本ssh_expect,接下来定义一些命令别名等,下面跟着脚本之家小编一起学习学习吧
用Expect实现Linux自动远程登陆.pdf
昨天一个网友问如何能够将输入密码的工作在shell里面自动完成,研究了一下,发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定,所以初步学习了一下expect,成果和大家分享一下: 应用一: 实现...
expect自动登录实战,主要讲述怎么安装、使用expect工具进行跨服务器的命令操作等,以及与shell脚本的结合使用案例。
linux自动化管理的必备工具,或许你需要perl,但个人觉得expect更好,针对性强。
今天小编就为大家分享一篇linux expect 自动登录交换机保存配置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
expect的linux安装包;
expect是一个基于Tcl的用于自动交互操作的工具语言,它适合用来编写需要交互的自动化脚本,比如上面提到的SSH输入...下面这篇文章主要给大家介绍了关于Linux expect实现自动登录脚本的相关资料,需要的朋友可以参考下。
今天小编就为大家分享一篇关于Linux下使用expect命令编写自动化交互脚本,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
学习安装expect,expect功能强大,非常详细的安装配置过程。
linux下的expect的简单用法及举例
linux script expect脚本编写方法
linux命令expect实现ssh登陆.docx
linux expect安装软件 附安装文档,提供expect-5.43.0.tar和tcl8.4.11-src.tar.zip,并附有readme.md,指导安装