[SSH] 遠端連線透過跳板主機操作的方法

本篇文章更新時間:2023/01/14
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


這個需求其實還滿常見的。有些單位會要求合作業者或是公司同仁只能透過指定 IP 連入公司主機或網路,減少資安問題。

不過我以為大家都是指定雲端主機來當作這個「跳板主機」,但上次與朋友聊到怎麼不能出來小聚的原因,才知道他把這個客戶要求的 IP 指定成他家上網的固定 IP,所以變成他只能在家作業。

聽起來少了個移動的彈性對吧?

就是很直覺的聽到要一個固定 IP 來授權,就給了「當前使用的固定 IP」,所以變成下面這樣:

我家固定IP -> 客戶公司主機

但其實可以是這樣:

不管我在哪的IP -> 跳板主機的固定IP -> 客戶公司主機

一方面不用因為要兼顧移動性,反而在自己家搞個跳板相關應用又或是直接懶得搞,坐鎮家裡XD

另一方面也是避開了家用網路,可能會因為突然挖馬路挖斷了什麼服務中斷導致連線異常的問題。

本文簡單筆記我的作法!

前置準備(情境條件)

  1. 使用 SSH 連線,不開啟密碼授權、僅使用 公開金鑰認證(Public Key Authentication)
  2. 跳板主機 mxp_tw IP: 33.33.33.33
  3. 我當前上網主機 localhost IP: 11.11.11.11
  4. 客戶公司主機 target IP: 22.22.22.22
  5. 客戶公司主機防火牆設定僅接受 33.33.33.33 這組 IP 連入

方法一

概念上最簡單的做法就是 ssh mxp_tw 這台跳板主機後,「在」mxp_tw 主機內「再」 ssh target 客戶主機。

等於先用 SSH 遠端連線到 mxp_tw 這台指定跳板主機後,又用這台主機去 SSH 客戶的 target 主機。

  • 使用 ~/.ssh/config 設定檔案來處理

localhost 這台電腦要設定:

Host    mxp_tw
HostName        33.33.33.33
Port    22
User mxp
IdentityFile    "/path/to/mxp_tw.key"

然後 mxp_tw 這台跳板主機的 config 也要設定:

Host    target
HostName        22.22.22.22
Port    22
User target_user
IdentityFile    "/path/to/target.key"
  • 指令處理版本
  1. ssh [email protected] -i /path/to/mxp_tw.key
  2. ssh [email protected] -i /path/to/target.key

方法二

使用 ProxyJump 指令,只需要設定 localhost 自己電腦中的 config 就好。(OpenSSH 版本至少大於 7.3

Host    mxp_tw
HostName        33.33.33.33
Port    22
User mxp
IdentityFile    "/path/to/mxp_tw.key"

Host    target
HostName        22.22.22.22
Port    22
User target_user
IdentityFile    "/path/to/target.key"
ProxyJump mxp_tw

直接在本機 localhost 下指令: ssh target 就會幫你透過 mxp_tw 這台跳板主機,轉連線到 target了。

  • 指令處理版本
ssh -o ProxyCommand="ssh -i /path/to/mxp_tw.key -W %h:%p [email protected]" -i /path/to/target.key [email protected]

雖然是一行搞定,但實在是太冗長,建議還是使用 config 的方式設定一次,以後打很短的 ssh 主機名 就可以。

結論

方法一,好處一樣,壞處是麻煩、key 要放一份在跳板主機上、如果管理的機器一多,忘記哪一台是跳板主機也是困擾阿!!

方法二,就簡單很多,連線設定與 key 都紀錄在本機的 config 裡,一目了然,也可以避開跳板主機有多人共用的資安問題。

強烈建議使用 config 檔案組態的設定方式,這樣一來連傳檔案的 scp 指令也通!

思考「跳板」這件事的時候,會直覺認為要先連上跳板,再連線目標 target 主機,所以設定 config 的時候一開始還設定錯誤,把 ProxyJump 寫在跳板主機那邊,以為是要「跳到目標主機」這件事。

實際上只要想著「我的目的是連線目標主機,中間要跳哪些跳板,再往後繼續 ProxyJump,所以可以不只是跳一層,中間要跳幾層就是由目標往回推每一個路徑上的連線主機,補上設定資訊。

參考資料:

  1. SSH ProxyCommand example: Going through one host to reach another server
  2. ProxyJump is safer than SSH agent forwarding


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____34%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

文章
Filter

Filter Search Results