‹ 指南

透過 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>。輸入機器的編號,或者名稱、位址的一部分,然後按 Enter:

Term 中顯示的 JumpServer 閘道選單,帶選項列表和 Opt 提示符
閘道的選單,顯示在 Term 裡。輸入機器編號,或名稱的一部分,然後按 Enter。這張圖是在模擬器上對著一台測試閘道拍的,所以列出的機器不是你的;要看的是它的樣子。

選好之後你就在那台機器的 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 —— 平台本體