首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >一条命令登录 JumpServer:自动输入密码和身份验证码

一条命令登录 JumpServer:自动输入密码和身份验证码

原创
作者头像
ypgsh
发布于 2026-08-10 18:52:04
发布于 2026-08-10 18:52:04
2500
举报

一、背景

很多公司会给开发人员提供测试或发布服务用的服务器。为了控制权限,通常会通过跳板机统一管理登录入口,并且除了用户名、密码之外,还会增加身份验证码。

安全性是提高了,但对使用者来说也带来了一些不便:

  1. 操作繁琐 每次都要打开 JumpServer 页面,输入用户名和密码,然后再拿出手机打开身份验证器,输入 6 位验证码。
  2. 不够命令行化 对软件开发人员来说,日常更习惯使用命令行。每次通过网页操作,体验不够顺手,也不够“炫”。

二、目标

实现:

一条命令登录 JumpServer,并停在资源选择主界面

也就是自动完成:

连接 JumpServer SSH 网关

输入用户名

输入密码

生成并输入身份验证码

进入资源选择页面

三、配置方法

1. 确认 SSH 入口

一般 JumpServer 的 Web 登录地址类似:

http://xx-ip/core/auth/login/?next=/luna/

脚本不能直接 SSH 这个 Web URL,需要走 JumpServer 的 SSH 网关。常见 SSH 入口是:

ssh -p 2222 用户名@xx-ip

需要先确认两件事:

JumpServer 是否支持 SSH 登录

SSH 网关端口是否为 2222

如果不支持 SSH 登录,需要找管理员开启或确认配置。管理员不同意的话,后面的步骤就不用继续了,看了也没用。

2. 安装本地依赖

需要两个工具:

brew install expect oath-toolkit

它们的作用分别是:

expect: 自动输入交互式 SSH 登录信息

oathtool: 根据 Google Authenticator secret 生成 6 位验证码

3. 从 Google Authenticator 导出 TOTP Secret

不同身份验证器的导出方式可能不同。这里以 Google Authenticator 为例。

Google Authenticator 已绑定的账号里看不到原始的 TOTP secret,需要通过“转移账号”功能导出。

操作步骤:

  1. 打开 Google Authenticator
  2. 进入“转移账号 / Transfer accounts”
  3. 选择“导出账号”
  4. 勾选 JumpServer
  5. 得到类似下面的内容:

otpauth-migration://offline?data=...

然后从这段内容里解码出 TOTP secret。

可以让 AI 帮你解码;不放心的话,也可以自己搜索相关工具,本地安装后自行解码。

如果不想折腾导出,也可以重新绑定一次身份验证器。一般第一次绑定时会显示二维码或密钥,那个密钥就是 TOTP secret。

4. 创建登录脚本

创建脚本文件:

vim jms.sh

内容如下。注意前几个变量需要根据自己的信息修改:

代码语言:txt
复制
#!/usr/bin/env bash
export JMS_HOST="跳板机ip"
export JMS_PORT="跳板机ssh端口,一般是2222"
export JMS_USER="登录名称"
export JMS_PASSWORD="登录密码"
export JMS_OTP="$(oathtool --totp -b "身份验证器拿到的TOTP secret")"

if [ -z "$JMS_OTP" ]; then
    echo "Failed to generate OTP"
    exit 1
fi

expect -c '
set timeout 30

set host $env(JMS_HOST)
set port $env(JMS_PORT)
set user $env(JMS_USER)
set password $env(JMS_PASSWORD)
set otp $env(JMS_OTP)

spawn ssh -p $port $user@$host

expect {
    -re "Are you sure you want to continue connecting.*" {
        send "yes\r"
        exp_continue
    }

    -re "(?i)password:" {
        send "$password\r"
        exp_continue
    }

    -re "(?i)(verification code|otp|mfa|authenticator|验证码|动态码|认证码)" {
        send "$otp\r"
        exp_continue
    }

    -re "(?i)(Last login|Welcome|资产|资源|JumpServer|Opt|请选择|ID|Name)" {
        interact
    }

    timeout {
        interact
    }

    eof {
        exit
    }
}
'  

5. 给脚本执行权限

chmod +x jms.sh

6. 执行登录

之后直接运行:

./jms.sh

脚本会自动完成用户名、密码和身份验证码输入,并停在 JumpServer 的资源选择主界面。

四、可选优化

如果想把命令再缩短一点,可以加一个 alias。

编辑 ~/.zshrc:

alias jms="/你的路径/jms.sh"

使配置生效:

source ~/.zshrc

之后只需要执行:

jms

The End

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、背景
  • 二、目标
  • 三、配置方法
    • 1. 确认 SSH 入口
    • 2. 安装本地依赖
    • 3. 从 Google Authenticator 导出 TOTP Secret
    • 4. 创建登录脚本
    • 5. 给脚本执行权限
    • 6. 执行登录
  • 四、可选优化
  • The End
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档