Shell编程(分发系统、expect登录、expect执行命令、expect参数)
分发系统介绍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 "; exp_continue} "assword:" { send "$passwd " } #需要密码时发送变量值过去 } interact #脚本结束,停留在远程的机器上,不会退出。
此文件保证登录信息的,清空的话,重新远程登录ssh 会有提示 /root/.ssh/known_hosts exp_continue 表示继续 表示换行 interact 继续停留在这台机器,不退出
3.添加执行权限
[root@yolks3 ~]# ./1.expect -bash: ./1.expect: 权限不够 [root@yolks3 ~]# chmod a+x 1.expect
4.执行脚本:成功登录
[root@yolks3 ~]# ./1.expect spawn ssh [email protected] 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. [email protected]'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 [email protected] expect { "yes/no" { send "yes "; exp_continue} "password:" { send "$passwd " } } expect "]*" #匹配 ]后边所有 send "touch /tmp/12.txt " expect "]*" send "echo 1212 > /tmp/12.txt " expect "]*" send "exit "
expect "]*" : 匹配 ]后边所有
2.修改执行权限
[root@yolks3 ~]# ./2.expect -bash: ./2.expect: 权限不够 [root@yolks3 ~]# chmod a+x 2.expect
3.A机器执行脚本
[root@yolks3 ~]# ./2.expect spawn ssh [email protected] [email protected]'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 "} "password:" { send "$passwd " } } expect "]*" send "$cm " expect "]*" send "exit "
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 [email protected] [email protected]'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 [email protected] [email protected]'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
相关推荐
linuxwcj 2020-10-21
bluecarrot 2020-08-19
luvzhan 2020-07-28
pimshell 2020-06-27
wiseMale 2020-06-01
SciRui 2020-05-06
BingGoGo技术 2020-03-03
gcong 2020-03-01
linuxhh 2020-02-15
86427019 2020-01-20
tvk 2020-01-09
quzhongwei 2020-01-06
风吹草动 2019-12-09
dmbjzhh 2019-11-08
onetozero 2019-11-08
supetan 2016-05-23
rickenwang 2019-11-03
beiya 2011-07-25