iTerm2结合 expect 脚本实现 ssh 登陆跳板机后登陆指定服务器

痛点

通常状况下,公司全部的服务器都在内网,公网访问、管理服务器都要先经过登陆一台跳板机,而后再由跳板机登陆到相应的服务器进行操做,跳板机与服务器的链接都是内网地址git

一般状况下,咱们都是经过两次ssh,第一次本地机器登陆跳板机,第二次在跳板机登陆指定机器,须要输入两次密码,容易输错github

后端码农天天要无数次登陆各类机器,若是能经过工具自动化,每次能省半分钟,而且心情会愉悦不少,下面来进行实战golang

expect 脚本

#!/usr/bin/expect
set host [lindex $argv 0]

# 设置一个变量,传入的参数,0 表示第一个参数,同时也为了复用,毕竟不仅是管理一台服务器

set TERMSERV 跳板机IP
set USER 跳板机用户名
set PASSWORD 跳板机密码
set UATUN 内网服务器用户名
set UATPWD 内网服务器密码

# 登陆跳板机
spawn ssh -l $USER $TERMSERV

# expect是expect环境的一个内部命令,判断上一个指令输入以后的获得输出结果是否包含""双引号里的字符串,好比后面的"*password:*",表示上一个输出结果包含password:*通配符表示先后能够是任意字符

#相似于编程中的 switch语句,exp_continue至关于 continue
expect {
        "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
  • 配置如图所示

image


image

send text at start: [expect脚本路径] [参数0] [参数1] ... 
以空格分割

大功告成

到此为止,已完成全部准备工做,此时再进入指定机器,只须要三步面试

  1. 打开 iTerm2
  2. 快捷键 Command+o 打开 Profiles 面板
  3. 选中某个 profile 单击,就直接进入目标机器了,开始挥洒方遒吧!

舒适提示

  • 之因此在expect 脚本中设置了一个参数,是为了复用,要进入别的机器,复用同一个 .exp脚本,添加一个新的 profile 便可
  • exp 脚本能够多个参数,达到更多场景下复用,具体又童鞋本身考量
  • 也能够把exp脚本当作sh脚本同样执行,好比 ./test-server.exp in-test-server-goapi-1,这样能够没必要要配置 profile

GitHub

本文为原创文章,转载注明出处,欢迎扫码关注公众号 楼兰 或者网站 https://lovecoding.club,第一时间看后续精彩文章,以为好的话,顺手分享到朋友圈吧,感谢支持。

image

相关文章
相关标签/搜索