‹ 指南

通过 JumpServer 堡垒机连接 v26.1.6+

先登录堡垒机,再由它把你送到目标机器。验证码、菜单,以及连过去之后的会话,Term 都能处理。

需要 Term v26.1.6 或更高版本。

通过网关连接从 v26.1.5 起就能用了。v26.1.6 改的是登录本身:进去要花的尝试次数更少,失败时也会说清楚到底是哪里出的问题。

撰写于

它和普通主机的区别

连普通服务器时,你直接连到那台机器。连 JumpServer 时,你连的是网关:它核对你的身份,列出你有权限访问的机器,然后代替你去连接目标机器。目标机器的密码你从来不需要持有 —— 那在网关手里。

所以它和 Term 的跳板机设置不是一回事。跳板机是把你穿透过去,由你自己去目标机器上登录;堡垒机则是在网关处终结连接,再另起一条连过去。因此请把 JumpServer 的地址填在普通的主机栏里,跳板机留空。

你真正连上的那一层叫 koko —— JumpServer 负责字符协议(SSH、Telnet、SFTP、Kubernetes、数据库)的组件。核对登录、画出菜单、再向目标机器发起连接的都是它,所以下文关于菜单和验证码的说明,讲的是 koko 的行为,而不是网页控制台的。

如何配置
  1. 新增主机 —— 填 JumpServer 的地址,以及它对外开放的 SSH 端口。这个端口常常是 2222 而不是 22,具体问管理员。
  2. 用户名和密码填的是你的 JumpServer 账号,不是目标机器上的账号。
  3. 如果 JumpServer 还要六位验证码,展开高级选项,把密钥粘贴到两步验证 (TOTP) 密钥。Term 会自己回答这个提示 —— 参见两步验证指南。
  4. 保存并连接。正常情况下你会看到网关的菜单。
连到目标机器

堡垒机把你放在一个菜单里,而不是 shell。提示符长这样:Opt>。输入机器的编号,或者名字、地址的一部分,然后回车:

Term 中显示的 JumpServer 网关菜单,带选项列表和 Opt 提示符
网关的菜单,显示在 Term 里。输入机器编号,或名称的一部分,然后回车。这张图是在模拟器上对着一台测试网关抓的,所以列出的机器不是你的;要看的是它的样子。

选中之后你就在那台机器的 shell 上了,一切照常 —— 按键栏、方向键、Ctrl-C、改变窗口大小都正常。用 exit 退出这个 shell,就回到菜单,可以直接挑下一台,不必重新登录。

Term 经由网关连到目标机器,随后是一个正常的 shell 提示符并执行了命令
同一个会话,选好机器之后:网关替你连过去,你就在那台机器自己的 shell 上了。从这里开始一切照常 —— 按键栏、Ctrl-C、改变窗口大小,都和别处一样。
跳过菜单

JumpServer 也支持直接连到某一台机器:把完整目标写进用户名栏 —— 你@账号@机器,其中 你 是 JumpServer 用户,账号 是目标机器上的登录名,机器 是它在 JumpServer 里的名称。

两种分隔符都可以。最省事的填法是:把完整目标填进用户名栏,主机栏只填 JumpServer 的地址 —— 这样不需要任何推断。如果你更习惯把整串 你@账号@机器@JumpServer地址 粘贴到主机栏,Term 会按最后一个 @ 拆分,正好把目标留在用户名里。至于是否开放直连,取决于 JumpServer 那边的设置。

连上之后有什么不同

在 JumpServer 主机上,命令建议和任务完成提示是关闭的。这两项功能靠 Term 在连接瞬间往你的 shell 里装一小段辅助脚本,而堡垒机的菜单并不是 shell —— 发过去只会被原样敲进菜单里,并且很可能被记录下来。所以 Term 会识别出 JumpServer 并跳过这一步。

SFTP 标签页暂不支持经由堡垒机使用,请在普通主机上使用它。

另外值得记住:堡垒机通常会录制会话 —— 这正是它存在的意义。经由它输入的内容都可能被保留并复查。

登录不上时

Term 会先问网关接受哪些登录方式,再决定先用哪一种。这一点在堡垒机上比在别处都要紧:koko 在密码通过之前根本不提供验证码那一步,所以一上来就走验证码的客户端,会在还没递出任何凭据之前,就白白用掉网关允许的一次尝试。只允许一两次的网关,会在登录进行到一半时直接挂断——而密码其实一直是对的。

真的挂断时,Term 现在会直说:服务器在给出结果之前就中断了登录。在 v26.1.6 之前,这里给出的是一条在源码之外毫无意义的内部错误。请稍等一会儿再试,不要立刻重来——这类限制是按时间计的,连着重试只会让它一直处在触发状态。

Term 提示服务器在给出结果之前就中断了登录,错误码 E_AUTH_CLOSED
网关在登录中途挂断,现在看起来是这样。在 v26.1.6 之前,这一行给出的是 SSH 库自己的说法——「Channel send error」——在源码之外毫无意义。错误码仍留在下面那行,方便你在反馈里原样引用。

如果网关要的是验证码,现在的失败信息会指出是哪一环:这台主机没填密钥、密钥读不出来,或者网关拒绝了这个验证码。每种情况的含义见两步验证指南。

源码

jumpserver/koko —— SSH 网关 · jumpserver/jumpserver —— 平台本体