分发系统-expect讲解,expect脚本远程登录,expect脚本远程执行命令,expect脚本

分发系统-expect讲解

  • 业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因为业务增加,代码增加,多台机器,就会非常麻烦;这是只需要一个分发系统,就可以把每次更新的代码发布到需要更新的服务器上
  • expect,是一种脚本语言;通过他可以实现传代码上线,也可以登录机器输入命令
  • 首先要准备一台模板机器,机器的IP,对应用户的密码,通过rsync同步代码,还可以通过expect去执行某些命令

    expect脚本远程登录

  • yum install -y expect
  • 自动远程登录
    [[email protected] sbin]# vim 1.expect
    [[email protected] sbin]# vim 1.expect
    #! /usr/bin/expect
    set host "192.168.21.129"
    set passwd "s5381561"
    spawn ssh [email protected]$host
    expect {
    "yes/no" { send "yes\r"; exp_continue}
    "password:" { send "$passwd\r" }
    }
    interact
    [[email protected] sbin]# chmod a+x 1.expect
    [email protected] sbin]# ./1.expect
    spawn ssh [email protected]
    The authenticity of host ‘192.168.21.129 (192.168.21.129)‘ can‘t be established.
    ECDSA key fingerprint is SHA256:r2y+hZVvvomXE4d3uRSM0cO+kMdqyWAOMqpTtA2qp6I.
    ECDSA key fingerprint is MD5:ee:da:3b:ea:27:56:38:82:bc:e8:73:10:18:a0:c2:bd.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added ‘192.168.21.129‘ (ECDSA) to the list of known hosts.
    [email protected]‘s password:
    Last login: Wed Jul 11 21:59:23 2018 from 192.168.21.1
    [[email protected] ~]# 
  • 在expect 定义变量,用set
  • 这个文件是就保证登录信息的,清空的话,重新远程登录ssh 会有提示 /root/.ssh/known_hosts
    exp_continue 表示继续 \r 表示换行 interact 继续停留在这台机器,不退出

    expect脚本远程执行命令

  • 远程登录后,执行命令并退出
    [[email protected] sbin]# vim 2.expect
    #!/usr/bin/expect
    set user "root"
    set passwd "s5381561"
    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: Sun Jul 22 22:07:20 2018 from 192.168.21.128
    [[email protected] ~]# touch /tmp/12.txt
    [[email protected] ~]# echo 1212 > /tmp/12.txt
    [[email protected] ~]# [[email protected] sbin]#
    [[email protected] ~]# ls /tmp/
    12.txt
    mysql.sock
    systemd-private-12cfefcc2aaa4137b4ea969d11fbf699-chronyd.service-5DHBEF
    systemd-private-12cfefcc2aaa4137b4ea969d11fbf699-vgauthd.service-sG39NN
    systemd-private-12cfefcc2aaa4137b4ea969d11fbf699-vmtoolsd.service-CVypi4
    [[email protected] ~]# cat /tmp/12.txt
    1212
  • expect "]*" : “” 通配]右边所有字符
  • send 执行命令

    expect脚本传递参数

  • 传递参数
    [[email protected] sbin]# vim 3.expect
    #!/usr/bin/expect
    set user [lindex $argv 0]  #第一个参数赋值给user
    set host [lindex $argv 1]  #第二个参数
    set passwd "s5381561"
    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.129 ls
    spawn ssh [email protected]
    [email protected]‘s password:
    Last login: Sun Jul 22 22:14:12 2018 from 192.168.21.1
    [[email protected] ~]# ls
    111  anaconda-ks.cfg
    [[email protected] ~]# [[email protected] sbin]#
    [[email protected] ~]# [[email protected] sbin]# ./3.expect root 192.168.21.129 "ls;w;vmstat 1"
    spawn ssh [email protected]
    [email protected]‘s password:
    Last login: Sun Jul 22 22:19:35 2018 from 192.168.21.128
    [[email protected] ~]# ls;w;vmstat 1
    111  anaconda-ks.cfg
    22:19:51 up 41 min,  2 users,  load average: 0.00, 0.02, 0.05
    USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.21.1     22:14   55.00s  0.01s  0.01s -bash
    root     pts/1    192.168.21.128   22:19    0.00s  0.01s  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
    2  0      0 1142532   2076 173112    0    0    15    14   51   44  0  0 99  0  0
    0  0      0 1142780   2076 173208    0    0     0     6  257  149  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0   294  188  181  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0     0  122  112  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0     0  116  105  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0     0  107   99  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0     0  160  136  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0     5  124  119  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0   168  157  157  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0     0  102   99  0  0 100  0  0
    0  0      0 1142780   2076 173208    0    0     0     0  119  113  0  0 100  0  0
    [[email protected] sbin]# 
  • 支持多条参数运行,vmstat 1命令10秒后自动退出

原文地址:http://blog.51cto.com/akui2521/2148777

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

分发系统-expect讲解,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

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

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

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

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

ssh远程连接linux服务器并执行命令

详细方法: SSHClient中的方法 参数和参数说明 connect(实现ssh连接和校验) hostname:目标主机地址 port:主机端口 username:校验的用户名 password:登录密码 pkey:私钥方式身份验证 key_filename:用于私钥身份验证的文件名 timeout:连接超时设置 allow_agent:这是布尔型,设置False的时候禁止使用ssh代理 look_for_keys:也是布尔型,禁止在.ssh下面找私钥文件 compress:设置压缩 exec