Lazy loaded image
智汇技术
🦘expect 通过跳板机登录服务器
字数 1194阅读时长 3 分钟
2023-12-10
2025-1-26
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
ExpectUnix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnetftpPasswdfsckrlogintipssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11图形用户界面中。(以上内容摘自 维基百科

基本命令

编写 expect 脚本,需要用到 spawnexpectsendinteract 四个基本命令

spawn

spawn 启用新的进程,后面的 sendexpect 命令都是和 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配置跳板机
notion image

编写expect脚本

上述脚本中的 expect 之后的字符串,不同的机器是不同的,需要单步执行并复制出来。

脚本执行

为了有一定的保密性,脚本放在以 . 开头的文件中。(linux 和 mac 系统中,. 开头的文件默认是隐藏的)
脚本执行
例如:
 
上一篇
【整理】MintCoin崔棉大师的花式发币法
下一篇
Hello World

评论
Loading...