首页 > 系统相关 >Linux expect命令

Linux expect命令

时间:2024-08-15 17:27:26浏览次数:9  
标签:IP REMOTE root 命令 expect Linux CONFIG localhost

Linux expect命令

​ 在Linux系统中,expect 是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。

expect自动交互流程:

​ spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.

使用场景

  1. 自动化登录和操作远程服务器

通过 ssh 登录远程服务器,自动输入密码,执行命令,并退出。这对于需要定期执行的任务或远程服务器的自动化管理非常有用。

​ 2. 安装和配置软件

在安装过程中,有些软件可能需要用户输入配置信息,例如数据库密码、管理员用户名等。使用 expect 可以自动填写这些信息,使软件安装过程自动化。

​ 3. 交互式脚本

创建交互式脚本,可以与用户进行动态的、基于输入的交互。这对于向用户提供命令行工具的友好界面很有用。

​ 4. 自动化测试

在测试环境中,expect 可以用于自动化测试,模拟用户的输入和操作。这有助于确保程序在各种情况下的正确性。

​ 5. 文件传输

使用 scp 进行文件传输时,如果需要密码,expect 可以自动提供密码,从而实现脚本化的文件传输。

​ 6. 自动化配置工具

与配置管理工具结合使用,可以编写 expect 脚本以在大规模环境中自动配置系统参数、安装软件或进行其他配置任务。

​ 7. 处理交互式命令行工具

与一些需要用户输入的命令行工具(如配置工具、安装程序等)交互时,expect 可以自动完成交互过程。

安装方式

YUM

[root@localhost ~]# yum install -y expect 

RPM

1.百度网盘
链接:https://pan.baidu.com/s/1wzditaRQsT8IaxjNPh6SKw?pwd=n441 
提取码:n441
2.蓝奏云
https://wweu.lanzouh.com/b00tatk4ba
密码:1z97

#将两个文件上传到这个目录
[root@localhost ~]# mkdir /rpm
[root@localhost rpm]# ll /rpm/
总用量 2200
-rw-r--r-- 1 root root  268656 6月  24 2015 expect-5.45-14.el7_1.x86_64.rpm
-rw-r--r-- 1 root root 1980564 11月 25 2015 tcl-8.5.13-8.el7.x86_64.rpm

[root@localhost rpm]# rpm -ivh *
准备中...                          ################################# [100%]
正在升级/安装...
   1:tcl-1:8.5.13-8.el7               ################################# [ 50%]
   2:expect-5.45-14.el7_1             ################################# [100%]

[root@localhost rpm]# expect -v
expect version 5.45

用法--前提准备

1.编写IP.conf文件

[root@localhost ~]# more IP.conf
#[DB]
DB-IP=192.168.8.160
DB-system-user=root
DB-system-passwd=admin
DB-port=1521
#[zookeeper]
ZK-IP=192.168.8.161
ZK-system-user=root
ZK-system-passwd=admin
ZK-port=2181
ZK-passwd=
#[MGR]
MGR-IP=192.168.8.163
MGR-system-user=root
MGR-system-passwd=admin

2.编写shell脚本

[root@localhost ~]# more 2.sh
#!/bin/bash

# 脚本功能:从配置文件读取目标机器信息,将本地文件传输到远程服务器的指定目录

# 参数:
# $1: 本地文件路径
# $2: 目标配置名称 (例如: DB 或 ZK)
# $3: 目标目录

# 检查参数是否完整
if [ $# -ne 3 ]; then
  echo "用法: $0 <本地文件路径> <目标配置总名称cat IP.conf> <将源端文件传送到目标端的哪个路径?>"
  exit 1
fi

# 提取参数
LOCAL_FILE=$1
CONFIG_NAME=$2
REMOTE_DIR=$3

# 配置文件路径
CONFIG_FILE="IP.conf"

# 检查配置文件是否存在
if [ ! -f "$CONFIG_FILE" ]; then
  echo "配置文件 $CONFIG_FILE 不存在!"
  exit 1
fi

# 从配置文件读取目标机器的信息
REMOTE_IP=$(grep "^${CONFIG_NAME}-IP" $CONFIG_FILE | cut -d'=' -f2)
REMOTE_USER=$(grep "^${CONFIG_NAME}-system-user" $CONFIG_FILE | cut -d'=' -f2)
REMOTE_PASSWD=$(grep "^${CONFIG_NAME}-system-passwd" $CONFIG_FILE | cut -d'=' -f2)

# 检查是否成功读取配置
if [ -z "$REMOTE_IP" ] || [ -z "$REMOTE_USER" ] || [ -z "$REMOTE_PASSWD" ]; then
  echo "无法从配置文件中读取 $CONFIG_NAME 的相关信息!"
  exit 1
fi

# 提示用户将要传输的文件
echo "正在将文件 $LOCAL_FILE 传输到 ${REMOTE_USER}@${REMOTE_IP}:${REMOTE_DIR}"

# 使用expect自动输入密码并传输文件
expect << EOF
  spawn scp $LOCAL_FILE ${REMOTE_USER}@${REMOTE_IP}:${REMOTE_DIR}
  expect {
    "yes/no" { send "yes\r"; exp_continue }
    "password:" { send "$REMOTE_PASSWD\r" }
  }
  expect eof
EOF

# 检查scp命令的执行结果
if [ $? -eq 0 ]; then
  echo "文件传输成功!"
else
  echo "文件传输失败!"
fi

[root@localhost ~]#

例如:将本地文件传送到目标机器

#例如:我将本地/root/1.sh文件传送到ZK机器的/root/目录下
[root@localhost ~]# ./2.sh 1.sh ZK /root/
正在将文件 1.sh 传输到 [email protected]:/root/
spawn scp 1.sh [email protected]:/root/
[email protected]'s password:
1.sh                                                                             100% 2701     3.0MB/s   00:00
文件传输成功!
[root@localhost ~]#



#ZK机器查看/root/目录
[root@localhost ~]# ll /root/
总用量 12
-rwxr-xr-x  1 root root 2701 8月  15 17:09 1.sh
-rw-------. 1 root root 1778 8月   5 15:13 anaconda-ks.cfg
-rwxr-xr-x. 1 root root  506 8月   5 15:17 run.sh
[root@localhost ~]#

标签:IP,REMOTE,root,命令,expect,Linux,CONFIG,localhost
From: https://www.cnblogs.com/xietingfeng321/p/18361421

相关文章

  • Linux下的gdb日常使用
    100个GDB小技巧0.常用0.1获取源代码行与程序地址之间的对应关系(1)显示当前执行指令所在的源代码行:infoline(2)显示特定函数或源代码行的地址信息:infoline<function-name>|<source-file>:<line-number>例如,要查看函数myFunction的起始地址,可以使用:infolinemy......
  • Linux 软件管理
    YUM仓库配置        默认的系统YUM源,需要连接国外的apache网站,网速比较慢,可以修改关联的网络YUM源为国内镜像的网站,比如网易,aliyu等替换yum源yuminstallwget 1.在/etc/yum.repos.d/目录下,备份repos文件cpCentOS-Base.repoCentOs-Base.repo.backup2.下......
  • 最完整版Linux安装mysql8.0(保姆教程)
    目录前言删除已安装的mysql通过yum源安装mysql前言安装mysql可以通过yum源和压缩包两种方式安装,压缩包安装的mysql通常使用的是旧的SysVinit脚本,使用命令如:servicemysqlstart。如果想要交给服务器的任务管理器管理需要进行额外配置,配置中可能会出现一些问题,推荐使......
  • linux 同时tail 多个文件并过滤多个关键字
    多个文件  过滤多个关键字或的关系tail-fcdc-adapter/err_cdc-adapter.logcdc-admin/err_cdc-adapter.logcdc-dpm/err_cdc-dpm.logcdc-extractor/err_cdc-extractor.log|grep-E'.log|ERROR'==>cdc-adapter/err_cdc-adapter.log<==[2024-08-1514:59:25.905......
  • Linux 的常用命令
    1.改变目录cd目录的表达方法:/根目录.当前目录..上一级目录~家目录cd/进入到系统根目录cd.进入当前目录cd..进入当前目录的父目录,返回上层目录cd/tmp进入指定目录/tmpcd~进入当前用户的家目录cd进入当前用户的家目录cd-回到刚才所在的目录2.......
  • Linux_开机_关机_重启_的时候执行脚本
    Linux_开机_关机_重启_的时候执行脚本转载注明来源:本文链接来自osnosn的博客,写于2024-08.参考Linux关机时执行指定脚本如何在Systemd下配置并运行关机前的脚本在Linux启动或重启时执行命令与脚本Centos7关机和重启前执行自定义脚本如何在重启或启动时执行命令或脚......
  • Linux 远程Debug JVM
    前言:    在我们的开发中由于部署环境的差异性,相信很多朋友都碰到过开发环境正常测试过的功能在测试环境甚至生产环境下出现bug的情况。一般情况下,生产环境可以采取的手段比较单一,即通过日志的方式获取运行中的环境上下文,分析日志文件并尝试重现bug。这会带来的问题还......
  • HexView 刷写文件脚本处理工具-命令行介绍(一)-数据对齐(/Adxx或/AD:yy)
    数据对齐(/Adxx或/AD:yy)每个块的起始地址将被对齐到给定参数xx的倍数。如果省略分隔符‘:’或‘=’,则参数xx被解释为十六进制值。如果使用了分隔符,则值xx以C风格进行解释,例如/AD:0xFF与/AD:255或/AD:11111111b相同。这个值只能是无符号字符值。示例说明......
  • HexView 刷写文件脚本处理工具-命令行介绍(二)-对齐长度(/AL[:length])
    对齐长度(/AL[:length])这个选项与/AD参数结合使用非常有用。它也将所有块的长度对齐,使其成为/Adxx选项中给定参数的倍数。示例说明:/AD4/AL如果有一个地址范围从0xE432到0xE47E的块,它将被对齐到0xE430到0xE47F。所有的字符将被填充为0xFF,或者被/Afxx指......
  • Linux系统性能监控工具Glances使用
    一Glances简介1.1glances介绍Glances是一个跨平台的监控工具,旨在通过curses或基于Web的界面呈现大量监控信息。该信息根据用户界面的大小动态调整。它也可以在客户端/服务器模式下工作。远程监控可以通过终端、Web界面或API(XML-RPC和RESTful)完成。统计数据也可以导出......