七十3、分发系统介绍、expect脚本远程登陆、expect脚本远程执行命令、expect传递参数

七十3、分发系统介绍、expect脚本远程登陆shell

1、分发系统介绍vim

expect脚本:能传输文件,能够远程执行命令,不须要输入密码,上线代码ssh

首先,准备一台模板机器,这台机器上的代码是最新的代码,准备要上线的代码,要知道要线上机器的ip地址,还有对应用户和密码。ide


2、expect脚本远程登陆spa

#  yum install -y expectip

 自动远程登陆ci

[root@MRX sbin]# vim 1.expect       路径:/usr/local/sbin/it

#! /usr/bin/expectio

set host "192.168.93.131"ast

set passwd "1346"         #这两个是定义变量,在expect中要加一个set。

spawn ssh root@$host       #expect命令有用到spawn,spawn后跟的就是系统的shell命令

expect {

"yes/no" { send "yes\r"; exp_continue}   #初次登陆时,发送yes,\r表示回车,exp_continue表示继续。

"password:" { send "$passwd\r" }   #这句和上面的一句,是截取系统内的提示,和系统交互:当系统输出yes/no时咱们怎么作,当输出password时咱们怎么作。

}

interact   #表示须要停留在远程的机器上,不须要退出来。不加它会直接退出来。若是加上expect eof,会在远程机器上停留一两秒钟而后退出来。


以前的make password安装的包其实就是expect包。

/root/.ssh/known_hosts   登陆时,一个陌生机器登陆会提示是否创建链接,点击确认保存后,信息会保存在这个文件内,清空这个文件的内容,再次登陆就会再次出现是否创建链接的提示。

[root@MRX sbin]# chmod a+x ./1.expect

[root@MRX sbin]# ./1.expect                 //执行这个脚本

spawn ssh root@192.168.93.131

The authenticity of host '192.168.93.131 (192.168.93.131)' can't be established.

ECDSA key fingerprint is SHA256:Z7xp3qHrdUE3yl4C34LCIrYyaCTvwC/hhZsWu1iZfS4.

ECDSA key fingerprint is MD5:ff:06:a8:bd:b0:d9:2f:72:df:64:07:b2:b0:36:c4:06.

Are you sure you want to continue connecting (yes/no)? yes   自动回复了

Warning: Permanently added '192.168.93.131' (ECDSA) to the list of known hosts.

root@192.168.93.131's password:     输入密码

Permission denied, please try again.

root@192.168.93.131's password:

Last failed login: Sat Jul 28 22:35:09 CST 2018 from 192.168.93.130 on ssh:notty

There was 1 failed login attempt since the last successful login.

Last login: Sat Jul 28 22:08:46 2018 from 192.168.93.1

[root@CLAY ~]#         //从主机名能够看出已经登陆到另一台机器上了

执行exit或者ctrl+d能够退出来。


3、expect脚本远程执行命令

 自动远程登陆后,执行命令并退出

[root@MRX sbin]# vim 2.expect      路径:/usr/local/sbin/

#!/usr/bin/expect

set user "root"

set passwd "1346"

spawn ssh $user@192.168.93.129


expect {

"yes/no" { send "yes\r"; exp_continue}

"password:" { send "$passwd\r" }

}           #前面的内容和1.expect保持一致

expect "]*"       #这里的]*是登陆到新机器后所在路径的右边[root@CLAY ~]#,root用户后面是#,普通用户是$,因此用通配,无论是什么都执行下面的命令。

send "touch /tmp/12.txt\r"     #touch 12.txt而后回车\r

expect "]*"

send "echo 1212 > /tmp/12.txt\r"     #同理

expect "]*"

send "exit\r"    #而后退出

[root@MRX sbin]# chmod a+x 2.expect       //加x权限,不加就执行不了


4、expect脚本传递参数

传递参数

[root@MRX sbin]# vim 3.expect     路径:/usr/local/sbin/

#!/usr/bin/expect


set user [lindex $argv 0]      #argv 0是第一个参数,把第一个参数的值赋给user

set host [lindex $argv 1]      #argv 1是第二个参数,把第二个参数的值赋给host

set passwd "1346"

set cm [lindex $argv 2]      #argv 2是第三个参数

spawn ssh $user@$host


expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect "]*"

send "$cm\r"

set timeout -1  #好比要执行一个vmstat,若是想设置超时时间,就加这一行,永不超时就是-1,也能够指定秒数

expect "]*"

send "exit\r"

[root@MRX sbin]# chmod a+x 3.expect.

[root@MRX sbin]# ./3.expect root 192.168.93.129 ls

[root@MRX sbin]# ./3.expect root 192.168.93.129 "ls;w;vmstat 1"

能够执行一个或多个命令,若是想把多个命令做为一个参数传递进去,就要用双引号。

相关文章
相关标签/搜索