前言


公司有多台服务器,必须先登录跳板机,再从跳板机登录服务器,频繁的输入命令很繁琐,有没有更好的方式去实现。
expect 可以完美的帮助你

涉及概念


Tcl:(Tool command language)一种很强大的脚本语言
expect: 基于Tcl开发的语言包,请自行安装

except核心命令


send:命令向进程发送字符串。
expect:命令等待进程的某些字符串。expect支持正规表达式并能同时等待多个字符串,并对每一个 字符串执行不同的操作。expect还能理解一些特殊情况,如超时和遇到文件尾。
spawn:激活一个Unix程序来进行交互式的运行。
interact:允许用户交互

send命令用法


send "hello god.wei"

输出
clipboard.png
send命令会直接将字符串发送到进程
那如果我要运行命令呢,可以这样

send "pwd\r"

expect命令


用于接受进程的输出,然后我们可以通过判断输出结果来执行不同的操作
expect patlist1 action1 patlist2 action2.....
该命令一直等到当前进程的输出和以上的某一个模式相匹配,或者等到时间超过一个特定的时间长度,或者等到遇到了文件的结束为止。

比如

#!/usr/bin/expect
expect apple
send "I want an apple\n"

输出
clipboard.png
expect 会监听当前进程的标准输出,如果满足期望,则继续运行下面的指令

spawn新建进程处理


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

spawn ssh shiwei.cao@godwei.com
expect apple
send "I want an apple\n"

这样当进程返回apple时就会向进程输出I want an apple

interact:允许用户交互


那如果我希望执行完操作之后不关闭远程终端,继续保持连接怎么办,这时候interact就派上用场了。

spawn ssh shiwei.cao@godwei.com
interact

这样就可以保持与远程服务器的连接

so?

这样我们就可以先连接跳板机然后在跳板机上执行ssh命令来连接远程服务器了

传送门使用except实现跳板机穿透登陆远程服务器

鸣谢:

1.TCL基本语法
2.except教程中文版


曹世伟
0 声望0 粉丝