[转帖]懒人有懒招:expect

懒人,expect · 浏览次数 : 0

小编点评

**expect脚本** ```bash 123456789101112131415161718192021#!/usr/bin/expect -f # 设置超时时间 set timeout -1 # 获取文件路径 file = [lindex $argv 0] # 获取编译路径 compile_path = [lindex $argv 1] # 获取运行路径 run_path = [lindex $argv 2] # 启动scp命令 spawn scp $file user@compile_host:$compile_pathexpect "*password: \"send \"mypass\\r\" spawn ssh user@compile_hostexpect \"*'s password: \"send \"mypass\\r\"expect \"*-bash-3.00*\"send \"cd $compile_path; make -f makefileimport; scp binary user@run_host:$run_path\\r\"expect \"*'s password: \"send \"mypass\\r\"expect \"*-bash-3.00*\"send \"exit\\r\"interact   " # 等待连接结束 interact ``` **其他注意事项** * 脚本需要在目标机器上执行,因为脚本中使用 `ssh` 命令。 * 脚本中使用 `expect` 命令进行交互,需要安装 `expect` 库。 * 脚本中使用 `set timeout` 设置连接的超时时间,可以根据需求调整。 * 脚本中使用 `spawn` 命令执行多个命令,可以将多个命令合并在一起执行。 * 脚本中使用 `expect` 命令执行命令时,可以使用 `-bash-3.00` 选项指定提示符。

正文

https://www.cnblogs.com/amazingjxq/archive/2010/10/17/1852889.html

 

  公司的开发机不知道怎么回事,无法用key登录ssh来免去输入密码的繁琐。昨天花了很长的时间来研究,也没找到问题所在。sshd_config里面的设置没有什么问题,反反复复检查了很多遍。.ssh目录及目录下文件的权限也没有问题。而且不知道谁把登录的文件改了,现在登录上去提示符变成了“-bash-3.00#”。看上去特别别扭。本来想在/etc/profile文件中加一句 PS1="[\u@\h \W]\\$ " 的,后来想想既然别人改成那样,自己再改回去的话会不合适。

  因为运行的机器上面连接某些对应的数据库,编译与运行的机器不是同一台。这样一来,从写好程序到运行就是这样:首先将写好的程序scp到编译机上。然后登录到编译机上,执行make等命令。最后再执行scp将编译好的可执行文件上传到运行机上面。中间的过程要输入3次密码,输入的命令也比较多。这样一来有很多时间都浪费在输入上面,影响工作效率。

  expect脚本可以很好的处理这个问题。expect用于处理需要交互的情形。比如需要输入密码等等。其实expect可以用在很多地方,只要是能够自动进行交互而不用人为干扰的操作都可以,没有做不到,只有想不到。

  下面的是完成上述操作的expect脚本:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/expect -f
 
set timeout -1
set file [lindex $argv 0]
set compile_path [lindex $argv 1]
set run_path [lindex $argv 2]
 
spawn scp $file user@compile_host:$compile_path
expect "*password: "
send "mypass\r"
 
spawn ssh user@compile_host
expect "*'s password: "
send "mypass\r"
expect "*-bash-3.00*"
send "cd $compile_path; make -f makefileimport; scp binary user@run_host:$run_path\r"
expect "*'s password: "
send "mypass\r"
expect "*-bash-3.00*"
send "exit\r"
interact

 

  这是一种迫不得已的方法,最好的还是用ssh key来避免输入密码。这样一来密码都是明文保存在脚本当中,不安全。当然可以借助expect输入上面的那些命令。登录ssh的expect脚本可以完成登录之后首先执行某些操作的功能,为了改变登录之后的提示符,可以将 PS1="[\u@\h \W]\\$ " 写入.my_bashrc文件,在脚本中加上执行". .my_bashrc"的操作,这样登录之后显示的提示符就是自己设定的,避免更改/etc/profile文件。同样也可以登录之后进入到某个目录等等。发现有的哥们是把/etc/passwd里面的home路径给改了来达到目的的,因为我们都用的是一个用户,这样自己方便了,但会影响他人。推荐还是用expect脚本完成。

  工欲善其事,必先利其器。expect可以节省我们很多的时间。

与[转帖]懒人有懒招:expect相似的内容:

[转帖]懒人有懒招:expect

https://www.cnblogs.com/amazingjxq/archive/2010/10/17/1852889.html 公司的开发机不知道怎么回事,无法用key登录ssh来免去输入密码的繁琐。昨天花了很长的时间来研究,也没找到问题所在。sshd_config里面的设置没有什么问题,反反

[转帖]linux内存分析工具pmap

👦博主介绍:程序员悟啦(乌拉~) ✍个人仓库:码云 🔊座右铭:“懒”对一个人的毁灭性有多大,早起的重要性就多大。 📚免责声明:文章由博主原创、部分文章整理于网络,仅供学习和知识分享 💬相遇是缘,既然来了就拎着小板凳🪑坐下来一起唠会儿👁‍🗨,如果在文中有所收获,请别忘了一键三连,动动你发

[转帖]JVM 虚拟机(整体架构、类文件结构)我来了~~~

JVM 虚拟机(整体架构、类文件结构)我来了~~~ 虚拟机 1.1 发展历程 1.1.1 java 往事 ​ Java 诞生在一群懒惰、急躁而傲慢的程序天才之中。 ​ 1990 年 12 月,Sun 的工程师 Patrick Naughton 被当时糟糕的 Sun C++ 工具折磨的快疯了。他大声抱

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打