七十三、分发系统介绍、expect脚本远程登录、expect脚本远程执行命令、expect传递参数

七十三、分发系统介绍、expect脚本远程登录

一、分发系统介绍

expect脚本:能传输文件,可以远程执行命令,不需要输入密码,上线代码。

首先,准备一台模板机器,这台机器上的代码是最新的代码,准备要上线的代码,要知道要线上机器的ip地址,还有对应用户和密码。

二、expect脚本远程登录

#  yum install -y expect

自动远程登录

[[email protected] sbin]# vim 1.expect       路径:/usr/local/sbin/

#! /usr/bin/expect

set host "192.168.93.131"

set passwd "1346"         #这两个是定义变量,在expect中要加一个set。

spawn ssh [email protected]$host       #expect命令有用到spawn,spawn后跟的就是系统的shell命令

expect {

"yes/no" { send "yes\r"; exp_continue}   #初次登录时,发送yes,\r表示回车,exp_continue表示继续。

"password:" { send "$passwd\r" }   #这句和上面的一句,是截取系统内的提示,和系统交互:当系统输出yes/no时我们怎么做,当输出password时我们怎么做。

}

interact   #表示需要停留在远程的机器上,不需要退出来。不加它会直接退出来。如果加上expect eof,会在远程机器上停留一两秒钟然后退出来。

之前的make password安装的包其实就是expect包。

/root/.ssh/known_hosts   登录时,一个陌生机器登录会提示是否建立连接,点击确认保存后,信息会保存在这个文件内,清空这个文件的内容,再次登录就会再次出现是否建立连接的提示。

[[email protected] sbin]# chmod a+x ./1.expect

[[email protected] sbin]# ./1.expect                 //执行这个脚本

spawn ssh [email protected]

The authenticity of host '192.168.93.131 (192.168.93.131)' can't be established.

ECDSA key fingerprint is SHA256:Z7xp3qHrdUE3yl4C34LCIrYyaCTvwC/hhZsWu1iZfS4.

ECDSA key fingerprint is MD5:ff:06:a8:bd:b0:d9:2f:72:df:64:07:b2:b0:36:c4:06.

Are you sure you want to continue connecting (yes/no)? yes   自动回复了

Warning: Permanently added '192.168.93.131' (ECDSA) to the list of known hosts.

[email protected]'s password:     输入密码

Permission denied, please try again.

[email protected]'s password:

Last failed login: Sat Jul 28 22:35:09 CST 2018 from 192.168.93.130 on ssh:notty

There was 1 failed login attempt since the last successful login.

Last login: Sat Jul 28 22:08:46 2018 from 192.168.93.1

[[email protected]CLAY ~]#         //从主机名可以看出已经登录到另外一台机器上了

执行exit或者ctrl+d可以退出来。

三、expect脚本远程执行命令

自动远程登录后,执行命令并退出

[[email protected] sbin]# vim 2.expect      路径:/usr/local/sbin/

#!/usr/bin/expect

set user "root"

set passwd "1346"

spawn ssh [email protected]

expect {

"yes/no" { send "yes\r"; exp_continue}

"password:" { send "$passwd\r" }

}           #前面的内容和1.expect保持一致

expect "]*"       #这里的]*是登录到新机器后所在路径的右边[[email protected] ~]#,root用户后面是#,普通用户是$,所以用通配,不管是什么都执行下面的命令。

send "touch /tmp/12.txt\r"     #touch 12.txt然后回车\r

expect "]*"

send "echo 1212 > /tmp/12.txt\r"     #同理

expect "]*"

send "exit\r"    #然后退出

[[email protected] sbin]# chmod a+x 2.expect       //加x权限,不加就执行不了

四、expect脚本传递参数

传递参数

[[email protected] sbin]# vim 3.expect     路径:/usr/local/sbin/

#!/usr/bin/expect

set user [lindex $argv 0]      #argv 0是第一个参数,把第一个参数的值赋给user

set host [lindex $argv 1]      #argv 1是第二个参数,把第二个参数的值赋给host

set passwd "1346"

set cm [lindex $argv 2]      #argv 2是第三个参数

spawn ssh [email protected]$host

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect "]*"

send "$cm\r"

set timeout -1  #比如要执行一个vmstat,如果想设置超时时间,就加这一行,永不超时就是-1,也可以指定秒数

expect "]*"

send "exit\r"

[[email protected] sbin]# chmod a+x 3.expect.

[[email protected] sbin]# ./3.expect root 192.168.93.129 ls

[[email protected] sbin]# ./3.expect root 192.168.93.129 "ls;w;vmstat 1"

可以执行一个或多个命令,如果想把多个命令作为一个参数传递进去,就要用双引号。

原文地址:http://blog.51cto.com/13576245/2152873

时间: 2024-08-11 17:49:22

七十三、分发系统介绍、expect脚本远程登录、expect脚本远程执行命令、expect传递参数的相关文章

Python远程登录Linux操作系统,执行命令、创建目录、上传及下载文件

主要是创建文件: #! /bin/bash # -*- coding: utf-8 -*- import paramiko import os ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ssh.set_missing_host_key_policy(key) pkey = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') paramiko.util.log

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

一.分发系统介绍 当我们要上线一个新代码的时候,如果机器少,我们的工作量不会很大,很容易完成,如果设备很多,有几十台,上百台的话,那我们的工作量会非常大,而且也不规范,这时,我们就可以用可以用开源的软件,expect脚本语言,进行实现分发系统的功能. 二. expect脚本远程登录 1.expect脚本远程登录2.安装:yum install -y expect3.写一个expect的自动远程登录脚本内容如下: #! /usr/bin/expect set host "192.168.1.31&

分发系统expect远程登录,执行命令,传递参数

分发系统:shell 上线脚本expect实现远程传输文件,执行命令,系统上线等功能expect 脚本远程登录vim 1.expect#! /usr/bin/expectset host "192.168.91.129"set passwd "1q2w3e"spawn ssh [email protected]$hostexpect {"yes/no" { send "yes\r"; exp_continue}"as

使用expect实现自动登录的脚本

使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ############################################## #!/usr/bin/expect set timeout 30 spawn ssh -l username 192.168.1.1 expect "password:" send "ispass\r&

mac 安装brew mac安装expect mac一键登录服务器脚本

mac 安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" mac安装expect(需要先安装brew,没有安装的话看上边) brew install expect mac一键登录服务器脚本 set user "zhaohh" set host "123.126.105.34" set p

CentOS6.5下通过Shell修改MySQL初始密码,开启远程登录,授权远程登录用户

CentOS6.5下通过Shell修改MySQL初始密码,开启远程登录,授权远程登录用户: 最近在写一个自动化部署的Shell脚本,需要通过Shell修改MySQL初始密码,开启远程登录,授权远程登录用户, 经过一番查找和实验,得到以下几个命令,给大家分享一下: 修改初始密码:mysqladmin -uroot -pvyCE2UwSaqx3xofR password "123456" 开启远程登录,授权远程登录用户:mysql -uroot -proot -e "grant

JAVA实现远程SSH连接linux并执行命令

package com.codeconch.ssh; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException;

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

一.分发系统介绍场景:公司业务逐渐扩大,后端服务端使用的编程语言是PHP,要运行PHP的环境,需要配置LAMP或者LNMP环境,最后还需要把代码上传到服务器上去,但是业务在迭代,需要新增功能,一台机器还好,可以在机器上直接修改,但是这样做不规范,如果机器有几十台或者上百台机器都是这一个站点的,比如有一个接口,APP访问量很大,APP需要调用服务端的一个接口,假如这个接口有50台机器在承载,这时候,就需要做一个分发系统,能够把每天或者每一段时间更新的代码分别发发布到这50台机器上去,分发器其实就是

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

expect脚本远程登录 yum install -y expect yum install -y tcl tclx tcl-devel 自动远程登录 #! /usr/bin/expect set host "192.168.133.132" set passwd "123456" spawn ssh [email protected]$host expect { "yes/no" { send "yes\r"; exp_co

Linux使用expect实现自动登录的脚本

前提条件服务器已经安装过tcl和expect, 若未安装:可以先执行 yum  install tcl  expect  进行安装 第一步.编写以下自动登录脚本login.sh ############################################## #!/usr/bin/expectset timeout 10 spawn ssh username@172.16.2.1expect "password:"send "password\r"int