Linux expect 实现自动人机交互 | 跨计算机scp/rsync进行文件传输,避免用户密码重复输入

1.背景简介

shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量、条件、算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多。

但是有时候我们可能会需要实现和交互程序如ftp, telnet服务器等进行交互的功能,需要我们去输入密码等进行人机交互,如果任务量非常大时,需要反复的检测和手动输入密码,就会很麻烦,这时候我们需要用到shell的自动交互功能。

这里我们以跨计算机进行大量文件备份为例子,介绍软件expect的使用。

2.expect的介绍和使用

expect是一个免费的编程工具,用来实现自动的交互式任务,且无需人为干预。expect非常的简单小巧,在自动化部署等诸多项目上面非常好用。

expect的详细安装和介绍可以参照官网或者如下链接,介绍得比较详细:https://blog.csdn.net/wangtaoking1/article/details/78268574
whereis expect去判断你的计算机有没有安装expect

这里只进行几个核心命令的强调和实际示例问题的解决。


expect基本命令

expect命令通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。它会根据你提供的pattern等你运行的程序反馈,当遇到你执行的程序或命令输出了指定的pattern,expect就会识别到。(识别

send命令接收一个字符串参数(你指定的,例如你的用户名或密码),并将该参数发送到进程。这个就是在expect识别了后,然后自动将内容输入给你的程序和命令。(自动交互

spawn命令用来启动新的进程(命令/程序),spawn后的send和expect命令都是和使用spawn打开的进程进行交互。(核心任务

interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。如果你执行程序不需要最后个性化去指定,那就不要它,运行完停止就好。(指定交互

3.实际使用

下面以将本算机的文件传输到别的计算机上进行文件备份为例子。

大文件常用的传输方式有scp, rsync等,不了解的话可以事先简单去了解一下,反正可以理解成就是cp复制命令的高阶、高速、稳定版。

补充rsync的基本用法:主要就三种方式

#在同一台计算机上进行从source路径到destination路径
rsync [OPTION] SRC DEST
#将本机文件传输到另一台,USR用户名,HOST是ssh地址
rsync [OPTION] SRC [USER@]HOST:DEST
#将另一台计算机文件传输到本机上,USR用户名,HOST是ssh地址
rsync [OPTION] [USER@]HOST:SRC DEST
#第四种和第三种是相对的,同样第五种和第二种是相对的,它们各自之间的区别在于登陆认证时使用的验证方式不同。
rsync [OPTION] [USER@]HOST::SRC DEST
rsync [OPTION] SRC [USER@]HOST::DEST

至于options就基本的几个,记住最常用的几个即可,比如 -a、-r、-v、-z、--delete 和 --exclude等。详见:http://c.biancheng.net/view/6121.html

跨计算机运行的最大障碍在于密码的输入,每一次进行访问都会需要人为地输入登录密码。当然,rsync支持免密码传输,那前提是你输入的计算机ssh设置为免密码登录。但是,对于生产的计算器,或者服务器,而非私人的,这个免密操作是不被允许的。

所以我们结合expect的自动交互和rsync命令实现:(麻烦的是需要先写一个expect的程序,然后循环去调用它)

expect程序:rsync.exp

#!/usr/bin/expect
set timeout 1080
set file [lindex $argv 0]
set password 123456
spawn rsync -avrp $file 10.0.015:/pakpobox/pobox7d2/atac1-130
expect "*password*" {send "$password\r"}
expect eof

#!/usr/bin/expect为expect的编译器,就是whereis expect的返回路径
set timeout 1080为expect的等待时间,这里是18min。这个特性是防止那些执行死机的命令的。一旦到了这个timeout,还是没有屏幕输出的话(这里是spwan后面命令的输出),expect脚本就会开始执行下面其他的代码了。或者我们在expect脚本中如果定义了timeout的响应代码的话,这些代码就会被执行。单位是秒,默认是10秒,可以给定具体时间,给定-1就是无timeout,永不执行下面的代码,知道它期待的pattern出现为止。
spawn后面就是程序或命令,它一个spawn只识别一个程序,所以不能直接管道符,我们才需要额外去循环调用。
expect后面就是要识别的pattern,send就是自动传入的内容。
expect eof结束标识,运行到此结束,可以用前面说的interact进行交互作为结束。
其他为变量设置set 变量名 内容, 且exp不识别#注释符。

自动执行的脚本:rsync.sh

#!/bin/bash
filelist=`cat sample1.txt` #filelist获取
for i in $filelist
do expect ./rsync.exp $i
done

推荐后台执行,就可以彻底set free了现在。

nohup bash rsync.sh &

4. 补充

其实除了expect小工具的学习和使用 还用更加直接的方法,就是使用rsync自带的密码识别参数--password-file,通过这个把密码文件(把密码先写到本地的随便一个可访问文件里面,内容只要密码就行,别的都不需要)自动读入就行。
具体格式就是:

rsync -aVz --progress --password-file=passwd.txt [本地文件路径] [远端计算机路径]
# passwd.txt 就是本地的存储了密码的文本文件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,488评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,034评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,327评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,554评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,337评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,883评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,975评论 3 439
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,114评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,625评论 1 332
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,555评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,737评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,244评论 5 355
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,973评论 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,362评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,615评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,343评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,699评论 2 370

推荐阅读更多精彩内容