type
Post
status
Published
date
Dec 10, 2023
slug
expect-login-server-by-jumper
summary
使用 except 命令,通过跳板机登录服务器的方法记录。
tags
工具
Linux
category
智汇技术
icon
password
跳板机(又名堡垒机)已经是大多数公司访问内部服务器的标配方式了,但是这种方式也面临着登录步骤繁琐,需要多次输入密码等流程,大大影响登录效率;这边偶然发现可以用 except 命令将其中的一些步骤自动化,能显著提升效率。
Expect 简介
维基百科:https://zh.wikipedia.org/wiki/Expect
Expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。(以上内容摘自 维基百科)
基本命令
编写
expect 脚本,需要用到 spawnexpectsendinteract 四个基本命令spawn
spawn 启用新的进程,后面的 send 和 expect 命令都是和 spawn 开启的新进程交互的。用法
例如:
expect
expect 用于接收 spawn 命令开启的进程的返回值(可以接收正则字符串)。用法
例如:
send
send 用于向 spawn 命令开启的进程发送数据用法
例如:
interact
interact 用于将控制权交还给用户用法
安装 Expect
MacOS
Linux
Expect 通过多个跳板机登录MySQL
场景
1、需要登录数据库排查异常
2、为了数据安全,数据库只给指定的
rds服务器c开放了访问权限,因此需要先登录指定的rds服务器c。3、为了服务器安全,需要通过部门的
跳板机b才能访问rds服务器c,因此需要先登录部门跳板机b。4、为了安全控制及审计,公司要求登录任何服务器都需要通过公司的
跳板机a,所以要登录部门的跳板机b,必须先登录公司的跳板机a。总结一下,需要完成上述场景需要以下几个步骤:
登录公司
跳板机a(需要输入密码) -> 登录部门跳板机b (需要输入密码) -> 登录rds服务器c -> 登录数据库(需要输入密码)上述流程,需要如果手动操作,需要3次输入不同的密码,且从一个跳板机想其他机器登录的时候,需要选择跳转,即使手速够快,也需要几十秒的时间。
Expect 实战
SSH config配置跳板机

编写expect脚本
上述脚本中的 expect 之后的字符串,不同的机器是不同的,需要单步执行并复制出来。
脚本执行
为了有一定的保密性,脚本放在以
. 开头的文件中。(linux 和 mac 系统中,. 开头的文件默认是隐藏的)脚本执行
例如:
- 作者:ruofei.wang
- 链接:https://blog.ruofei.wang/article/expect-login-server-by-jumper
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。


