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

20.27 分发系统介绍

应用场景

当业务越做越大,服务器需求越来越多,几台服务器的话还好一点;当十几、几十台的时候,工作量就非常大!并且不规范,需要一个模板机分发到各个机器上去。

可以用开源的软件,expect脚本语言,进行实现分发系统的功能。

20.28 expect脚本远程登录

  • yum install -y expect
  • 自动远程登录,并执行命令
#!/usr/bin/expect
set host "192.168.21.130"
set passwd "rootroot"
spawn ssh [email protected]$host
expect {
    "yes/no" {send "yes\r"; exp_continue}
    "assword:" {send "$passwd\r"}
}
interact #表示停留在机器上
#如果需要退出 可以expect eof

执行操作

[[email protected] sbin]# vim 1.expect

#清空远程登录的记录
[[email protected] sbin]# vi /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.21.130 (192.168.21.130)‘ can‘t be established.
ECDSA key fingerprint is SHA256:e6Fx3oJ8GcMbFnmTV7JIcvZ3sG6W6yrfvdKccXk+c7c.
ECDSA key fingerprint is MD5:15:57:6c:19:21:a2:e4:3e:df:19:27:13:c2:2e:8e:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.21.130‘ (ECDSA) to the list of known hosts.
[email protected]‘s password:
Last login: Wed Feb 28 08:57:58 2018 from 192.168.21.1

20.29 expect脚本远程执行命令

  • 自动远程登录后,执行命令并退出
#脚本代码

#!/usr/bin/expect
set user "root"
set passwd "rootroot"
spawn ssh [email protected]

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"

执行

[[email protected] sbin]# chmod a+x 2.expect
[[email protected] sbin]# ./2.expect
spawn ssh [email protected]
[email protected]‘s password:
Last login: Wed Feb 28 09:30:05 2018 from 192.168.21.132
[[email protected] ~]# touch /tmp/12.txt
[[email protected] ~]# echo 1212 > /tmp/12.txt
[[email protected] ~]# [[email protected] sbin]# 

#查看远程端机上结果
[[email protected] sbin]# ./1.expect
spawn ssh [email protected]
[email protected]‘s password:
Last login: Wed Feb 28 09:36:13 2018 from 192.168.21.132
[[email protected] ~]# ls /tmp/12.txt
/tmp/12.txt
[[email protected] ~]# cat /tmp/12.txt
1212

20.30 expect脚本传递参数

  • 传递参数
[[email protected] sbin]# vim 3.expect

#!/usr/bin/expect

set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "rootroot"
set cm [lindex $argv 2]
spawn ssh [email protected]$host

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"

执行

[[email protected] sbin]# chmod a+x 3.expect
[[email protected] sbin]# ./3.expect root 192.168.21.130 ls
spawn ssh [email protected]
[email protected]‘s password:
Last login: Wed Feb 28 09:39:16 2018 from 192.168.21.132
[[email protected] ~]# ls
anaconda-ks.cfg  shell
[[email protected] ~]# [[email protected] sbin]# 

[[email protected] sbin]# ./3.expect root 192.168.21.130 "ls;w;vmstat 1"
#当有多个命令 需要用双引号 作为一个参数传进去
spawn ssh [email protected]
[email protected]‘s password:
Last login: Wed Feb 28 09:46:40 2018 from 192.168.21.132
[[email protected] ~]# ls;w;vmstat 1
anaconda-ks.cfg  shell
 09:49:34 up  1:00,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.21.1     08:57   12:46   0.03s  0.03s -bash
root     pts/1    192.168.21.132   09:49    0.00s  0.00s  0.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
 3  0      0 206004   2108 197024    0    0    46    11   93  134  0  0 99  1  0
 0  0      0 206020   2108 197040    0    0     0     0   74  105  0  0 100  0  0
 0  0      0 206020   2108 197040    0    0     0     0   76  100  0  0 100  0  0
 0  0      0 206020   2108 197040    0    0     0     9   87  126  0  0 100  0  0
 0  0      0 206020   2108 197040    0    0     0     0   75  101  0  0 100  0  0
 0  0      0 206020   2108 197040    0    0     0    98   82  115  0  1 99  0  0
 0  0      0 206020   2108 197040    0    0     0     5   89  121  0  0 100  0  0
 0  0      0 206020   2108 197040    0    0     0     0   75  108  0  0 100  0  0
 0  0      0 206012   2108 197048    0    0     0     0   92  119  1  1 98  0  0
 0  0      0 206012   2108 197048    0    0     0     0   88  118  0  0 100  0  0

#expect会有超时时间,大概10s左右

原文地址:http://blog.51cto.com/3622288/2073780

时间: 2024-08-10 17:17:47

分发系统介绍、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

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

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

详解在 Linux 启动时,如何自动执行命令或脚本

我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟.当你注销或者关机时,也是这样. 更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作. 本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法. 注意:我们假定使用的是 Bash 作为登录及注销的主 Shell.如果你使用的是其他 Shell,那么有些方法可能会无效.如果有其他的疑问

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

expect脚本远程登录、远程执行命令和脚本传参简单用法

expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expect: expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp scp telnet. expect就可以根据设定的规则,自动帮我们输入密码,大大节省了时间. 远程登录lin

批量复制及执行命令shell脚本

平时在处理一个或几个机器运行环境时,一个机器一个机器处理也能接受,但是如果是一批机器,几十或几百台,要是一台一台去安装环境,光是输入同一的命令,估计你自己都想吐,所有聪明的人会想一些偷懒的办法,确实可以找到一些省时省力的方法,比如写一个批量处理shell脚本,这几天在处理一批(八九十台)机器环境,找了一些批量处理的脚本,包括批量传输(scp)文件到多台机器上.批量执行命令到多台机器.还有需要交互的命令,下面记录一些这些命令: 机器IP文件:ip.txt 192.168.10.201 192.16

Linux在后台执行命令或脚本

在日常的工作中,我们会遇到执行备份.恢复数据等执行过程时间很长的命令或者脚本程序运行,此时,我们为防止执行过程被打断,需要将命令或脚本在后台执行.1)方法1nohup sh reload.sh &2)方法2(推荐使用)使用screen命令临时在后台开辟一个新的窗口,将命令或脚本放到窗口内执行,这样执行过程就不会被断了.具体实现方法如下:(前提是已经安装了screen包)screen -S yangchunliriot 新建一个yangchunliriot的screenscreen -ls 列出所

树莓派初入门(1):SSH远程登录与VNC远程桌面

前言: 本文主要讲解,对于一个无树莓派显示屏,无键盘,无鼠标,手边只有手机,电脑和一个已烧录好raspbian-stretch系统的树莓派3B+的玩家,如何进行远程登录,进而可以进程桌面的连接. 工具: 1.手机(目的是开启一个局域网热点,让电脑和树莓派可以处于同一个局域网内) 2.电脑(iPad,手机等可以进行远程连接的工具) 3.树莓派3B+(已烧录好raspbian-stretch系统镜像) Let's get started! 第一步:准备工作 系统镜像已烧录至SD卡中.详细步骤可看树莓