expect实现A远程到B,B上sftp去C取文件

expect套件说明
expect是一个用来实现自动交互功能的软件套件。
如执行shell脚本,需要从终端得到输入时(如ssh root@192.168.1.2),expect可以根据提示,模拟标准输入来实现交互脚本执行。
如:ssh登录,ftp登录等都符合交互的定义。
shell和expect理解为两种不同的脚本语言,expect有独自的语法、变量。

expect安装:包在装机镜像里面有rpm的安装包,安装expect前,需要先安装tcl插件,expect涉及到有tcl的依赖库。

expect的命令

spawn               交互程序开始后面跟命令或者指定程序(启动新进程执行)
expect              获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send       用于发送指定的字符串信息
exp_continue        在expect中多次匹配就需要用到
send_user           用来打印输出 相当于shell中的echo
exit                退出expect脚本
eof                 expect执行结束 退出

set                 定义变量
puts                输出变量
set timeout         设置超时时间
/r 					回车

#位置参数会存入数组$argv,与shell不一样
set IP [lindex $argv 0]
set USERNAME [lindex $argv 1]
set PWD [lindex $argv 2]
ssh ${USERNAME}@${IP} 			#ssh登陆远程主机

spawm命令:就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的

spawn ftp ftp.test.com      //打开新的进程,该进程用户连接远程ftp服务器
expect "Name"             //进程返回Name时
send "user\r"        //向进程输入anonymous\r
expect "Password:"        //进程返回Password:时
send "123456\r"    //向进程输入don@libes.com\r
expect "ftp> "            //进程返回ftp>时
send "binary\r"           //向进程输入binary\r
expect "ftp> "            //进程返回ftp>时
send "get test.tar.gz\r"  //向进程输入get test.tar.gz\r

作用是登录到ftp服务器ftp.test.com 上,并以二进制的方式下载服务器上的文件test.tar.gz

重点来了,怎么实现A机自动远程到B机,B机上自动使用sftp去C机取文件,然后将文件回传到A机

脚本链接地址

在A主机通过ssh方式登录到B主机后执行相应的命令或者脚本:

ssh 用户名@目的主机地址 ‘要执行的命令或者脚本’

注意:
1.在调用脚本时,必须写全该脚本所在的全路径。
2.要执行的命令用单引号’’扩起来,引号扩起来的命令要和前面的内容写在一行,不能换行。

PS:其他命令

interact			允许用户交互(停在终端界面,允许用户进行操作)

比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令。interact可以达到这些目的。下面的demo在自动登录ftp后,允许用户交互。

spawn ftp ftp.test.com
expect "Name"
send "user\r"
expect "Password:"
send "123456\r"
interact
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值