标签:expect
20.27 分发系统介绍shell项目-分发系统-expect讲解
使用场景:
假如公司的业务做得越来越大,APP后端服务端所使用的编程语言是php,要想运行这个环境运行php代码,需要搭建lamp,lnmp的环境,最后还需要把代码上传到服务器上面。
在平时工作中,业务不断的迭代,有新的功能出现,这时候就需要更改代码,一台机器还好,甚至还可以在服务器上面更改,但是这样不规范,若干台,两三台的量还可以接受,如果机器特别多,甚至上百台的时候,这上百台机器存储的都是公司的站点。比如一个接口,APP访问量很大,APP需要调用服务端的接口,假如这个接口需要五十台机器去承载,那这时候就需要去搞一个分发系统了,能够让每天,每段时间更新的代码,分别的分布到这五十台机器上面去。
expect介绍
可以说是一种脚本语言,它和shell比较相似,它可以实现传输文件,远程执行命令(不需要输入密码)
它其实是一种上线代码的工具。
上线:开发的代码,发布到线上环境。
准备工作以及过程:
准备一台模板机器,这台机器上面的代码是最新的,准备要上线的代码。
比如准备给50台机器上线,这50台机器的ip地址,用户和密码都需要知道
使用expect脚本,借助于rsync把这些代码给推送到这50台机器上面去。假如需要在某机器上面执行命令,还可以远程执行这些命令。
就是这样的一个过程。
20.28 expect脚本远程登录
1 安装expect
[root@centos7-01 ~]# yum install -y expect
2 编写expect脚本
目的:自动远程登录,并执行命令
[root@centos7-01 ~]# cd /usr/local/sbin/ #! /usr/bin/expect set host "192.168.189.129" set passwd "?????" #此处输入你的登录密码. spawn ssh root@$host expect { "yes/no" { send "yes\r"; exp_continue} "password:" { send "$passwd\r" } } interact
脚本解释:
set host "192.168.189.129" set passwd "?????" spawn ssh root@$host 远程登录的主机,以及密码,set host=$host,在except里,set设定变量 spwan后接的是系统的shell命令,ssh远程登录,root@$host利用root登录进去 expect { "yes/no" { send "yes\r"; exp_continue} "password:" { send "$passwd\r" } } interact 这是核心执行语句 "yes/no"表示第一次远程登录192.168.189.129,会提示"yes/no"。因为第一次登录,本机的/root/.ssh/know_hosts文件会误认为这是一台陌生的机器,严格上可能是不安全,所以会提示。 "yes/no" { send "yes\r"; exp_continue} expect截取系统的提示,当遇到提示"yes/no"的时候,发送yes(yes\r,\表示回车键), exp_continue表示继续 "password:" { send "$passwd\r" } expect截取系统的提示,当遇到提示"password:"的时候,把密码(set passwd的变量)发送过去, expect支持用户交互 interact结束
3 添加执行权限
[root@centos7-01 sbin]# chmod a+x 1.expect
4 执行脚本
[root@centos7-01 sbin]# ./1.expect spawn ssh root@192.168.189.129 root@192.168.189.129's password: Last login: Wed Jun 6 15:27:39 2018 from 192.168.189.1 [root@centos7-02 ~]#
5 查看ip地址
[root@centos7-02 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.189.129 netmask 255.255.255.0 broadcast 192.168.189.255 inet6 fe80::b485:96d0:c537:251e prefixlen 64 scopeid 0x20<link> ether 00:0c:29:73:7c:4c txqueuelen 1000 (Ethernet) RX packets 266 bytes 27149 (26.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 257 bytes 25678 (25.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
成功登录192.168.189.129,主机名也变了
标签:expect
原文地址:http://blog.51cto.com/13578154/2125533