文档章节

Shell编程(分发系统介绍、expect远程登录、expect远程执行命令、expect传递参数)

蛋黄_Yolks
 蛋黄_Yolks
发布于 09/24 21:43
字数 1019
阅读 19
收藏 12

分发系统介绍expect

分发系统expect即分发脚本,是一种脚本语言;通过他可以实现传输,输入命令(上线代码)
应用场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因为业务增加,代码增加,多台机器,就会非常麻烦;这是只需要一个分发系统,就可以把每次更新的代码发布到需要更新的服务器上

expect脚本远程登录

实验需求:自动远程登录
准备工作:

  • A机器ip:192.168.248.130
  • B机器ip:192.168.248.129

脚本编写:

1.A机器yum安装expect

yum install -y expect

2.A机器编写脚本文件1.expect,脚本内容如下:

#! /usr/bin/expect
set host "192.168.248.129" #expect脚本中定义变量语法
set passwd "123456"
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue}
"assword:" { send "$passwd\r" } #需要密码时发送变量值过去
}
interact #脚本结束,停留在远程的机器上,不会退出。

此文件保证登录信息的,清空的话,重新远程登录ssh 会有提示 /root/.ssh/known_hosts exp_continue 表示继续 \r 表示换行 interact 继续停留在这台机器,不退出

3.添加执行权限

[root@yolks3 ~]# ./1.expect
-bash: ./1.expect: 权限不够
[root@yolks3 ~]# chmod a+x 1.expect

4.执行脚本:成功登录

[root@yolks3 ~]# ./1.expect
spawn ssh root@192.168.248.129
The authenticity of host '192.168.248.129 (192.168.248.129)' can't be established.
ECDSA key fingerprint is SHA256:cYZ9a5uLeFpKmGT7U7X3BIwLdUoZXcRFMSYCgXOkuLA.
ECDSA key fingerprint is MD5:9a:1a:ca:60:8a:bf:ed:b4:45:13:f8:c8:aa:1a:92:f5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.248.129' (ECDSA) to the list of known hosts.
root@192.168.248.129's password: 
Last login: Mon Sep 24 20:45:13 2018 from 192.168.248.1
[root@yolks2 ~]#

expect脚本远程执行命令

实验需求:远程登录之后退出,即A机器执行脚本之后还是A机器的状态
脚本实现:

1.新建脚本2.expect,脚本内容如下:

#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh $user@192.168.248.129

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 "]*" : 匹配 ]后边所有

2.修改执行权限

[root@yolks3 ~]# ./2.expect
-bash: ./2.expect: 权限不够
[root@yolks3 ~]# chmod a+x 2.expect

3.A机器执行脚本

[root@yolks3 ~]# ./2.expect 
spawn ssh root@192.168.248.129
root@192.168.248.129's password: 
Last login: Mon Sep 24 20:57:24 2018 from 192.168.248.130
[root@yolks2 ~]# touch /tmp/12.txt
[root@yolks2 ~]# echo 1212 > /tmp/12.txt
[root@yolks2 ~]# [root@yolks3 ~]#

4.B机器查看验证文件是否创建成功

[root@yolks2 ~]# ls -l /tmp/12.txt 
-rw-r--r-- 1 root root 5 9月  24 21:10 /tmp/12.txt
[root@yolks2 ~]# cat !$
cat /tmp/12.txt
1212

expect脚本传递参数

传递参数

1.编写脚本3.expect文件,内容如下:

#!/usr/bin/expect

set user [lindex $argv 0] #第一个参数
set host [lindex $argv 1] #第二个参数
set passwd "123456"
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"

2.添加x权限 : chmod a+x 3.expect 3.执行脚本:./3.expect [参数1] [参数2] [参数3]

[root@yolks3 ~]# ./3.expect root 192.168.248.129 ls
spawn ssh root@192.168.248.129
root@192.168.248.129's password: 
Last login: Mon Sep 24 21:10:31 2018 from 192.168.248.130
[root@yolks2 ~]# ls
2.expect  aming.txt  anaconda-ks.cfg
[root@yolks2 ~]# [root@yolks3 ~]# 

参数3支持多条命令执行:"命令1;命令2;..."

[root@yolks2 ~]# [root@yolks3 ~]# ./3.expect root 192.168.248.129 "ls;w"
spawn ssh root@192.168.248.129
root@192.168.248.129's password: 
Last login: Mon Sep 24 21:32:18 2018 from 192.168.248.130
[root@yolks2 ~]# ls;w
2.expect  aming.txt  anaconda-ks.cfg
 21:33:58 up 50 min,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.248.1    20:45   20:46   0.00s  0.00s -bash
root     pts/1    192.168.248.130  21:33    0.00s  0.00s  0.00s w

© 著作权归作者所有

蛋黄_Yolks
粉丝 9
博文 100
码字总数 112269
作品 0
通州
私信 提问
2018-4-25 18周1次课 分发系统-expect讲解(上)

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

alexis7gunner
10/30
0
0
分发系统--expect

本文索引: 分发系统介绍 expect脚本远程登录 expect脚本远程执行命令 expect脚本传递参数 --- 分发系统介绍 场景介绍:企业中随之业务的逐渐增大,后端所使用的编程语言是php,系统为LAMP/...

Lu_Castiel
02/27
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
分发系统介绍expect脚本远程登录expect脚本远程执行命令 expect脚本传递参数

分发系统介绍 分发系统-expect讲解(也就是一个分发的脚本) 场景: 业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因为业...

lyy549745
07/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
10
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
17
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
11
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部