文档章节

20.27 分发系统介绍~ 20.30 expect脚本传递参数

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

自动远程登录 vim 1.expect

[root@yong-01 sbin]# vim 1.expect

#! /usr/bin/expect
set host "192.168.180.135"
set passwd "20655739"
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue}  //
"password:" { send "$passwd\r" }
}
interact  //脚本结束
在expect 定义变量,用set
这个文件是就保证登录信息的,清空的话,重新远程登录ssh 会有提示 /root/.ssh/known_hosts
exp_continue 表示继续 \r 表示换行 interact 继续停留在这台机器,不退出
加入执行权限

[root@yong-01 sbin]# ./1.expect
-bash: ./1.expect: 权限不够
[root@yong-01 sbin]# chmod a+x 1.expect 
[root@yong-01 sbin]# ll 1.expect 
-rwxr-xr-x 1 root root 191 7月  19 22:45 1.expect
成功登录
[root@yong-01 sbin]# ./1.expect
spawn ssh root@192.168.180.135
The authenticity of host '192.168.180.135 (192.168.180.135)' can't be established.
ECDSA key fingerprint is SHA256:oYqovve1b2BwHDBYcFasCiiFzZTHJvKDbTGZAjmlMXc.
ECDSA key fingerprint is MD5:3d:f8:af:0d:85:48:db:2a:46:0e:68:5f:eb:43:3e:43.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.180.135' (ECDSA) to the list of known hosts.
Last login: Thu Jul 19 21:43:59 2018
[root@yong-02 ~]#
expect脚本远程执行命令
动远程登录后,执行命令并退出 vim 2.expect
[root@yong-01 sbin]# vim 2.expect

#!/usr/bin/expect
set user "root"
set passwd "20655739"
spawn ssh $user@192.168.180.135

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"
expect "]" *“” 通配]右边所有字符,

send 执行命令

A 机器执行脚本

[root@yong-01 sbin]# ll 2.expect 
-rw-r--r-- 1 root root 283 7月  19 22:49 2.expect
[root@yong-01 sbin]# chmod a+x 2.expect 
[root@yong-01 sbin]# ./2.expect 
spawn ssh root@192.168.180.135
Last login: Thu Jul 19 22:45:41 2018 from 192.168.180.134
[root@yong-02 ~]# touch /tmp/12.txt
[root@yong-02 ~]# echo 1212 > /tmp/12.txt
[root@yong-02 ~]# [root@yong-01 sbin]# 
B机器查看脚本运行的命令是否成功
[root@yong-02 ~]# ll /tmp/12.txt 
-rw-r--r-- 1 root root 5 7月  19 22:50 /tmp/12.txt
[root@yong-02 ~]# cat /tmp/12.txt 
1212
expect脚本传递参数
传递参数 vim 3.expect 
root@yong-01 sbin]# vim 3.expect

#!/usr/bin/expect
set user [lindex $argv 0]   //第一个参数
set host [lindex $argv 1]   //第二个参数
set passwd "20655739"
set cm [lindex $argv 2]   //第三参数
spawn ssh $user@$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"
加执行权限 chmod a+x 3.expect
./3.expect [第一个参数] [第二个参数] [第三个参数]
[root@yong-01 sbin]# chmod a+x 3.expect 
[root@yong-01 sbin]# ./3.expect root 192.168.180.135 "ls;w"
spawn ssh root@192.168.180.135
Last login: Thu Jul 19 22:51:33 2018 from 192.168.180.134
[root@yong-02 ~]# ls;w
anaconda-ks.cfg  cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso  multi-user.target  rescue.target
a.txt            c.txt                                              poweroff.target    zabbix-release-3.2-1.el7.noarch.rpm
b.txt            graphical.target                                   reboot.target      这里需要指定一个用户名的密码文件
 22:56:20 up 29 min,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.180.134  22:56    4.00s  0.03s  0.00s w
支持多条参数
[root@yong-01 sbin]# ./3.expect root 192.168.180.135 "ls;vmstat 1"
spawn ssh root@192.168.180.135
Last login: Thu Jul 19 22:56:10 2018 from 192.168.180.134
[root@yong-02 ~]# ls;vmstat 1
anaconda-ks.cfg  cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso  multi-user.target  rescue.target
a.txt            c.txt                                              poweroff.target    zabbix-release-3.2-1.el7.noarch.rpm
b.txt            graphical.target                                   reboot.target      这里需要指定一个用户名的密码文件
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 1119512   2112 190328    0    0    95    50  122  163  0  1 99  0  0
 0  0      0 1119516   2112 190360    0    0     0     0   87   95  0  1 99  0  0
 0  0      0 1119516   2112 190364    0    0     4    10  108  120  0  0 100  0  0
 0  0      0 1119516   2112 190364    0    0     0     0   87   92  0  0 100  0  0
 0  0      0 1119516   2112 190364    0    0     0    99   81   95  0  0 100  0  0
 0  0      0 1119516   2112 190364    0    0     0    10  113  125  0  1 99  0  0
因为vmstat 1 是持续运行的。所以脚本最后的exit 就没有办法执行,只能手动终止

 

© 著作权归作者所有

共有 人打赏支持
洗香香
粉丝 0
博文 9
码字总数 12286
作品 0
南宁
程序员
私信 提问
分发系统介绍&expect脚本远程登录&expect脚本远程执行命令&expect脚本传递参数

20.27 分发系统介绍 应用场景 企业中随之业务的逐渐增大,后端所使用的编程语言是php,系统为LAMP/LNMP架构,需要将代码上传到服务器中;代码会不断的迭代,这就需要在业务服务器上更新代码,...

影夜Linux
07/20
0
2
2018-4-25 18周1次课 分发系统-expect讲解(上)

20.27 分发系统介绍 由于业务迭代更新,需要更改代码,如果机器很多,那么久需要一个分发系统,可以把每段时间更新的代码分别发布到机器上去 分发系统就是上线的shell脚本,核心为expect ex...

alexis7gunner
04/24
0
0
20.27 分发系统介绍;20.28 expect脚本远程登录;20.29 expect脚本远程执行

20.27 分发系统介绍 shell项目-分发系统-expect 20.28 expect脚本远程登录 1. 安装expect : [root@hao-01 ~]# yum install -y expect 自动远程登录 2. 创建配置1.expect脚本(远程登录) : ...

主内安详
04/25
0
0
20.27分发系统介绍;20.28expect脚本远程登录;20.29expect脚本远程执行命令;20.30expect脚本传递参数

20.27 分发系统介绍 shell项目-分发系统-expect 20.28 expect脚本远程登录 1. 安装expect [root@hao-01 ~]# yum install -y expect 自动远程登录 2. 创建配置1.expect脚本(远程登录) [root@h...

主内安详
2017/09/20
0
0
20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数

20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数

夜归人8421
04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

腾讯与Github的魔幻会面背后的故事…

10月22日,腾讯开源管理办公室有幸邀请到Github新晋CEO Nat Friedman,前来鹅厂参观交流。目前腾讯已经有近70个项目在Github上开源,共获得17w stars,世界排名11位。Github是腾讯开源的主阵...

腾讯开源
31分钟前
1
0
单例模式

单例模式(Singleton pattern)属于创建型设计模式。 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对...

NinjaFrog
36分钟前
1
0
TypeScript基础入门之装饰器(三)

转载 TypeScript基础入门之装饰器(三) 继续上篇文章[TypeScript基础入门之装饰器(二)] 访问器装饰器 Accessor Decorator在访问器声明之前声明。 访问器装饰器应用于访问器的属性描述符,可用...

durban
53分钟前
2
0
spring5调研学习(转载)

Spring框架的新功能 这一章主要提供Spring框架新的功能和变更。 升级到新版本的框架可以参考。Spring git。 内容列表 Spring 5.x框架新的功能 Spring 4.x框架新的功能 Spring 3.x框架新的功能...

小海bug
今天
2
0
为何Spring框架能这么流行?

想要学习更多关于Spring框架在Java开发者中如此流行?看这篇文章可以学到更多! Spring框架特性 Spring是用于应用开发中的一款强大,轻量级框架。更广泛地说,你可以认为Spring框架是一个定义...

java知识分子
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部