痛点一般情况下,公司所有的服务器都在内网,公网访问、管理服务器都要先通过登录一台跳板机,然后再由跳板机登录到相应的服务器进行操作,跳板机与服务器的连接都是内网地址通常情况下,我们都是通过两次ssh,第一次本地机器登录跳板机,第二次在跳板机登录指定机器,需要输入两次密码,容易输错后端码农每天要无数次登录各种机器,如果能通过工具自动化,每次能省半分钟,并且心情会愉悦很多,下面来进行实战expect 脚本#!/usr/bin/expectset host [lindex $argv 0]# 设置一个变量,传入的参数,0 表示第一个参数,同时也为了复用,毕竟不只是管理一台服务器set TERMSERV 跳板机IPset USER 跳板机用户名set PASSWORD 跳板机密码set UATUN 内网服务器用户名set UATPWD 内网服务器密码# 登录跳板机spawn ssh -l $USER $TERMSERV# expect是expect环境的一个内部命令,判断上一个指令输入之后的得到输出结果是否包含"“双引号里的字符串,比如后面的”password:",表示上一个输出结果包含password:通配符表示前后可以是任意字符#类似于编程中的 switch语句,exp_continue相当于 continueexpect { “yes/no” {send “yes\r”;exp_continue;} “password:” { send “$PASSWORD\r” } }# 登录内网expect “$USER@*” {send “ssh -l $UATUN $host\r”}expect { “yes/no” {send “yes\r”;exp_continue;} “password:” { send “$UATPWD\r” } }interact# 执行完成后保持交互状态,把控制权交给控制台将脚本保存成一个文件,例如 server.exp可执行权限,chmod +x server.exp配置 iTerm2进入配置页面, Profiles -> Open Profiles -> Edit Profiles配置如图所示send text at start: [expect脚本路径] [参数0] [参数1] … 以空格分割大功告成到此为止,已完成所有准备工作,此时再进入指定机器,只需要三步打开 iTerm2快捷键 Command+o 打开 Profiles 面板选中某个 profile 单击,就直接进入目标机器了,开始挥洒方遒吧!温馨提示之所以在expect 脚本中设置了一个参数,是为了复用,要进入别的机器,复用同一个 .exp脚本,添加一个新的 profile 即可exp 脚本可以多个参数,达到更多场景下复用,具体又童鞋自己考量也可以把exp脚本当做sh脚本一样执行,比如 ./test-server.exp in-test-server-goapi-1,这样可以不必要配置 profileGitHub源码传送门各种数据结构及算法实现, LeetCode解题思路及答案大厂面试题汇总及答案解析本文为原创文章,转载注明出处,欢迎扫码关注公众号 楼兰 或者网站https://lovecoding.club,第一时间看后续精彩文章,觉得好的话,顺手分享到朋友圈吧,感谢支持。