分发系统介绍、expect脚本远程登录、expect脚本远程执行命令、expect脚本传递参数
7月19日任务
20.27 分发系统介绍
20.28 expect脚本远程登录
20.29 expect脚本远程执行命令
20.30 expect脚本传递参数
20.27 分发系统介绍
公司业务逐渐扩大时,假如使用的网站或者APP的后端服务器所使用的语言是PHP,如果要想运行PHP代码,需要配置一个lamp或lnmp的环境,最后还需要把代码上传到服务器上去,但是在平常工作中经常有一些新的业务改变,这个时候就需要去修改代码,如果服务器不多还可以快速的在服务器上修改,但是如果有50台或更多服务器,那么就不可能直接在服务器进行修改了,这个时候就可以使用到分发系统这样的上线工具进行上线,发布上线代码,所谓的分发系统也就是上线的shell脚本,最核心的东西就是expect,expect也可以说是一种脚本语言,和shell很像,可以用它去实现传输文件,还可以实现自动远程登录执行命令,不需要输入密码。
使用什么工具上线代码,所谓上线就是把开发人员写的代码发布到线上环境去。
分发系统如何实现发布上线代码,首先要准备一台模板的机器,这台机器上的代码是最新的代码,是需要准备上线的代码,另外要给这50台电脑上线代码,还需要知道50台电脑的IP和对应的用户密码,然后使用expect脚本借助于rsync把这些代码推送到50台机器上,假如说还需要执行一些命令,还可以使用expect远程登录后去执行命令,就是这样的一个过程实现新代码上线发布。
20.28 expect脚本远程登录
1、yum安装expect 软件包
[root@jimmylinux- ~]# yum install -y expect
2、编写expect脚本
示例1:通过expect脚本自动远程登录,并执行命令。
[root@jimmylinux- sbin]# vi .expect #! /usr/bin/expect
set host "192.168.52.129" 定义变量
set passwd "***@126.com" 定义变量
spawn ssh root@$host 登录机器的语句
expect {
"yes/no" { send "yes\r"; exp_continue} 初次登录一台机器会提示yes/no 对话框
"assword:" { send "$passwd\r" }
}
interact
[root@jimmylinux- sbin]# ssh 192.168.52.129 因为之前有登录过,所以不会提示yes/no 对话框
root@192.168.52.129's password: [root@jimmylinux- sbin]# vi /root /.ssh/known_hosts 清空文件里的内容,再次登录时候就会提示yes/no
执行效果
[root@jimmylinux- sbin]# chmod a+x .expect [root@jimmylinux- sbin]# ./.expect
spawn ssh root@192.168.52.129 root@192.168.52.129's password:
Last login: Thu Jul :: from 192.168.52.128 [root@jimmylinux- ~]# 已经自动登录到192.168.52. 这台机器
20.29 expect脚本远程执行命令
示例2:通过expect脚本自动远程登录,并执行命令最后退出。
[root@jimmylinux- sbin]# vi .expect #!/usr/bin/expect
set user "root"
set passwd "***@126.com"
spawn ssh $user@192.168.52.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"
执行效果
[root@jimmylinux- sbin]# chmod a+x .expect [root@jimmylinux- sbin]# ./.expect
spawn ssh root@192.168.52.129 root@192.168.52.129's password:
Last login: Thu Jul :: from 192.168.52.1 [root@jimmylinux- ~]# touch /tmp/.txt [root@jimmylinux- ~]# echo > /tmp/.txt [root@jimmylinux- ~]# [root@jimmylinux- sbin]# [root@jimmylinux- sbin]# ./.expect
spawn ssh root@192.168.52.129 root@192.168.52.129's password:
Last login: Thu Jul :: from 192.168.52.128 [root@jimmylinux- ~]# ls -l /tmp/.txt
-rw-r--r-- root root 7月 : /tmp/.txt [root@jimmylinux- ~]# cat !$
cat /tmp/.txt
比较1.expect和2.expect脚本的区别,1脚本仅仅是登录进去,然后interact表示expect脚本结束了,但是会停留在机器上不会退出登录的机器,2脚本登录完之后,还需要执行几条命令,最后才是退出结束脚本。
[root@jimmylinux- sbin]# cat .expect
#! /usr/bin/expect
set host "192.168.52.129"
set passwd "1982ya@163.com"
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"; exp_continue}
"assword:" { send "$passwd\r" }
}
interact
[root@jimmylinux- sbin]# cat .expect
#!/usr/bin/expect
set user "root"
set passwd "1982ya@163.com"
spawn ssh $user@192.168.52.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"
20.30 expect脚本传递参数
shell里面有$1 $2,expect也是可以传递参数的,也相当于是内置变量。
示例3:expect脚本传递参数
[root@jimmylinux- sbin]# vi .expect #!/usr/bin/expect set user [lindex $argv ]
set host [lindex $argv ]
set passwd "***@126.com"
set cm [lindex $argv ]
spawn ssh $user@$host expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"
执行效果
[root@jimmylinux- sbin]# vi .expect
[root@jimmylinux- sbin]# chmod a+x .expect
[root@jimmylinux- sbin]# ./.expect root 192.168.52.129 "ls;w;vmstat 1" 传递多条命令,需要使用双引号引起来,中间用分号分隔。
spawn ssh root@192.168.52.129
root@192.168.52.129's password:
Last login: Thu Jul :: from 192.168.52.128
[root@jimmylinux- ~]# ls;w;vmstat
.txt anaconda-ks.cfg cc.txt sed
.cap .txt awk grep test
.txt .txt b.txt jimmylinux zabbix-release-3.2-.el7.noarch.rpm
:: up :, users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/ 192.168.52.1 : : .02s .02s -bash
root pts/ 192.168.52.128 : .00s .03s .00s w
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
分发系统介绍、expect脚本远程登录、expect脚本远程执行命令、expect脚本传递参数的更多相关文章
- Linux - 执行命令与脚本
001 - Linux执行多条命令 方法1:在命令行下可以一次性粘贴多条语句,shell会依次执行并输出结果 方法2:在一个命令行中,用分号将各个命令隔开或者使用&&连接各个命令 示例 ...
- 详解如何在 Linux 启动时自动执行命令或脚本
我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟.当你注销或者关机时 ...
- shell脚本批量ssh登陆主机并执行命令
shell脚本批量ssh登陆主机并执行命令 今天在客户现场遇到了这个问题,客户没有管理工具,无法批量登陆主机下发命令,几个个C段啊,让我一个一个登陆,.................. 所以写了个s ...
- Shell脚本中实现切换用户并执行命令操作【转】
第一种方法 cat test.sh #!/bin/bashsu - test <<EOFpwd;exit;EOF 执行结果图: 第二种方法 当然也可以用下面的命令来执行 复制代码代码如下: ...
- 在 Linux 启动或重启时执行命令与脚本
有时可能会需要在重启时或者每次系统启动时运行某些命令或者脚本.我们要怎样做呢?本文中我们就对此进行讨论. 我们会用两种方法来描述如何在 CentOS/RHEL 以及 Ubuntu 系统上做到重启或者系 ...
- 分发系统介绍 expect脚本远程登录 expect脚本远程执行命令 expect脚本传递参数
expect脚本远程登录 yum install -y expect yum install -y tcl tclx tcl-devel 自动远程登录 #! /usr/bin/expect set h ...
- expect脚本远程登录、远程执行命令和脚本传参简单用法
expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expe ...
- Linux远程ssh执行命令expect使用及几种方法
expect命令实现脚本免交互 一.Linux下SSH无密码认证远程执行命令 在客户端使用ssh-keygen生成密钥对,然后把公钥复制到服务端(authorized_keys). 实现步骤: 1.客 ...
- 批量复制及执行命令shell脚本
平时在处理一个或几个机器运行环境时,一个机器一个机器处理也能接受,但是如果是一批机器,几十或几百台,要是一台一台去安装环境,光是输入同一的命令,估计你自己都想吐,所有聪明的人会想一些偷懒的办法,确实可 ...
- NET Core 跨平台执行命令、脚本
一.前言 我们可能会遇到需要在程序中执行一些系统命令,来获取一些信息:或者调用shell脚本..NET Core 目前已经可以跨平台执行,那么它如何跨平台执行命令呢,请看下面的讲解. 二.Proces ...
随机推荐
- (二)golang--windows下vscode的安装以及go环境的配置
在官网上下载vscode对应的安装包,进行安装: 安装的时候记得勾选加入到path路径: 下载go语言的SDK:https://studygolang.com/dl目前最新版本是1.13.4,我就下这 ...
- python 爬取网页简单数据---以及详细解释用法
一.准备工作(找到所需网站,获取请求头,并用到请求头) 找到所需爬取的网站(这里举拉勾网的一些静态数据的获取)----------- https://www.lagou.com/zhaopin/Pyt ...
- [Pandas]利用Pandas处理excel数据
Python 处理excel的第三包有很多,比如XlsxWriter.xlrd&xlwt.OpenPyXL.Microsoft Excel API等,最后综合考虑选用了Pandas. Pand ...
- AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...
- BigInt 的使用!
今天学长讲的卡特兰数真的是卡的一批,整个全是高精的题,这时我就使用重载运算符,然后一下午就过去了 首先来看一波水题(也就卡了2小时) . A. 网格 内存限制:512 MiB 时间限制:1000 ms ...
- vue登录功能和将商品添加至购物车实现
2.1: 学子商城--用户登录 用户登录商城用户操作行为,操作用户输入用户名和密码 点击登录按钮,一种情况登录成功 一种情况登录失败 "用户名或密码有误请检查" 2.2:如何实现 ...
- libpcap的下载与安装(apt-get安装unable to locate package 的解决方法(Ubantu))
因为网络安全课的实验课要求,我们得下载libcap我们得做一个类似于tcpdump的一个东西.具体要求就不贴出来了. libpcap只能在官网(www.tcpdump.org)下到,我用的os是Ubu ...
- [干货]AspNetCore熟练应用CancellationToken,CTO会对你刮目相看
背景 已经有很多文章记录了 web程序中采用异步编程的优势和.Net异步编程的用法, 异步编程虽然不能解决查询数据库的瓶颈, 但是利用线程切换,能最大限度的弹性利用工作线程, 提高了web服务的响应能 ...
- T-SQL Part VIII: CROSS APPLY, OUTER APPLY
除了CROSS JOIN, INNER JOIN, OUTER JOIN之外,T-SQL还提供了CROSS APPLY和OUTER APPLY这两个较为另类的Set操作符. 首先来看CROSS APP ...
- suseoj 1206 众数问题 (相邻数比较)
1206: 众数问题 时间限制: 1 Sec 内存限制: 128 MB提交: 45 解决: 8[提交][状态][讨论版][命题人:liyuansong] 题目描述 给定含有n个元素的多重集合S,每 ...