分发系统——expect

20.27 分发系统介绍

expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。

分发准备:

模板脚本、服务器IP、用户名、密码、expect脚本

20.18 expect脚本远程登录

使用expect前需要先安装:

[[email protected] ~]# yum install -y expect
安装完成后就可以写expect脚本了。

自动远程登录,并执行命令

远程登录一台主机:
[[email protected] ~]# ssh 192.168.8.138
Are you sure you want to continue connecting (yes/no)? yes
[email protected]‘s password:
Last login: Wed Sep 20 18:36:21 2017 from 192.168.8.1
#如果是第一次登录,则会提示(yes/no),如果之前登陆过则不会提示
#那么如何使其再次提示呢?

[[email protected] ~]# vim /root/.ssh/known_hosts
##编辑该文件,将其中内容清空即可。
expect远程登录脚本:

[[email protected] ~]# vim 1.expect
#! /usr/bin/expect
set host "192.168.8.138"
#连接到主机192.168.8.138
set passwd "123456"
#密码
spawn ssh [email protected]$host
#spawn调用shell命令ssh(登录),“set host”和“set passwd”为expect定义的两个变量
expect {
"yes/no" { send "yes\r"; exp_continue}
#ssh首次远程登录一台主机是会提示yes/no;"\r“表示回车
"assword:" { send "$passwd\r" }
#密码
}
interact
#interact的作用是停留在远程机器上,不退出
#expect脚本结束符号:expect eof——执行结束后暂停几秒钟后退出
#如果不加任何结束符号,命令执行完后马上退出

更改文件权限:
[[email protected] ~]# chmod a+x 1.expect

执行该脚本:
[[email protected] ~]# ./1.expect
spawn ssh [email protected]
The authenticity of host ‘192.168.8.138 (192.168.8.138)‘ can‘t be established.
ECDSA key fingerprint is 79:63:d9:ee:35:ad:f3:41:8d:45:b0:3b:c2:53:f6:f2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.8.138‘ (ECDSA) to the list of known hosts.
[email protected]‘s password:
Last login: Wed Sep 20 18:45:04 2017 from 192.168.8.136
[[email protected] ~]#
即,远程登录到机器“[[email protected] ~]”。

20.29 expect脚本远程执行命令

[[email protected] ~]# vim 2.expect
#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh [email protected]

expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
expect "]"
#匹配到“]”时执行下面的命令
send "touch /tmp/12.txt\r"
expect "]
"
send "echo 1212 > /tmp/12.txt\r"
expect "]*"
send "exit\r"

[[email protected] ~]# chmod a+x 2.expect

执行脚本:
[[email protected] ~]# ./2.expect
spawn ssh [email protected]
[email protected]‘s password:
Last login: Wed Sep 20 18:51:51 2017 from 192.168.8.136
[[email protected] ~]# touch /tmp/12.txt
[[email protected] ~]# echo 1212 > /tmp/12.txt
[[email protected] ~]#
[[email protected] ~]#
执行完命令后退出[email protected]。

检查执行结果:

[[email protected] ~]# cat /tmp/12.txt
1212
20.30 expect脚本传递参数

[[email protected] ~]# vim 3.expect
#!/usr/bin/expect
#调用expect内置变量:“[lindex $argv 0]”、“[lindex $argv 1]”、“[lindex $argv 2]”
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "123456"
set cm [lindex $argv 2]
spawn ssh [email protected]$host

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]"
send "$cm\r"
expect "]
"
send "exit\r"

更改权限:
[[email protected] ~]# chmod a+x 3.expect

执行脚本:
[[email protected] ~]# [[email protected] ~]# ./3.expect root 192.168.8.138 ls;w
spawn ssh [email protected]
[email protected]‘s password:
Last login: Wed Sep 20 19:12:48 2017 from 192.168.8.136
[[email protected] ~]# ls
anaconda-ks.cfg
[[email protected] ~]# 19:14:04 up 41 min, 2 users, load average: 0.02, 0.02, 0.08
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root tty1 18:33 37:36 0.15s 0.15s -bash
root pts/0 192.168.8.1 18:36 4.00s 0.19s 0.01s w

原文地址:http://blog.51cto.com/13242922/2107956

时间: 2024-11-05 11:00:45

分发系统——expect的相关文章

分发系统-expect

分发系统-expect expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录.登录多台系统执行指定命令:创建文件最好以expect结尾: 安装包 yum install -y expect 自动远程登录 1.expect代码: #! /usr/bin/expect set host "192.168.188.3" set passwd "123456" spawn ssh [email protected]$host exp

分发系统-expect讲解,expect脚本远程登录,expect脚本远程执行命令,expect脚本

分发系统-expect讲解 业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上:但是因为业务增加,代码增加,多台机器,就会非常麻烦:这是只需要一个分发系统,就可以把每次更新的代码发布到需要更新的服务器上 expect,是一种脚本语言:通过他可以实现传代码上线,也可以登录机器输入命令 首先要准备一台模板机器,机器的IP,对应用户的密码,通过rsync同步代码,还可以通过expect去执行某些命令 expect脚本远程登录 yum i

2018-4-25 18周1次课 分发系统-expect讲解(上)

20.27 分发系统介绍 由于业务迭代更新,需要更改代码,如果机器很多,那么久需要一个分发系统,可以把每段时间更新的代码分别发布到机器上去 分发系统就是上线的shell脚本,核心为expect expect是一种脚本语言,和shell很像,可以用它去实现传输文件和远程执行命令,不需要去输入密码 20.28 expect脚本远程登录 [[email protected] ~]# yum install -y expect (过程省略) ·自动远程登录 expect中定义变量和shell中的区别 s

2018-4-27 18周2次课 分发系统-expect讲解(下)

20.31 expect脚本同步文件 ·自动同步文件 [[email protected] sbin]# chmod a+x 4.expect [[email protected] sbin]# ./4.expect spawn rsync -av [email protected]:/tmp/12.txt /tmp/ [email protected]'s password: receiving incremental file list 12.txt sent 30 bytes  recei

分发系统expect远程登录,执行命令,传递参数

分发系统:shell 上线脚本expect实现远程传输文件,执行命令,系统上线等功能expect 脚本远程登录vim 1.expect#! /usr/bin/expectset host "192.168.91.129"set passwd "1q2w3e"spawn ssh [email protected]$hostexpect {"yes/no" { send "yes\r"; exp_continue}"as

shell项目-分发系统-expect

安装expect [[email protected] ~]# yum install -y expect 用脚本登陆远程机器编写脚本1.expect内容如下: [[email protected] expect]# vim 1.expect #!/usr/bin/expect set host "192.168.130.128" #定义变量 set passwd "6811327" #定义变量 spawn ssh [email protected]$host ex

expect脚本同步文件、指定host和要同步的文件、构建文件分发系统、批量远程执行命令

expect脚本同步文件 1.自动同步文件 [[email protected] shell]# vi 4.expect 增加如下脚本内容: #!/usr/bin/expect set passwd "123456" spawn rsync -av [email protected]:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send &

使用 expect 命令执行自动分发系统

一.命令 except 实例详解 介绍 expect 使用场景 二.构建文件分发系统 需求背景 实现思路 核心命令

20.31 expect脚本同步文件;20.32 expect脚本指定host和要同步的文件;20.33 构建文件分发系统;20.34

20.31 expect脚本同步文件 自动同步文件 1. 同步远程机器hao2上/tmp/12.txt文件 到本机/tmp/下: [[email protected] ~]# vim 4.expect 添加内容: #!/usr/bin/expect set passwd "admin" spawn rsync -av [email protected]192.168.211.129:/tmp/12.txt /tmp/ expect { "yes/no" { send