本篇文章更新時間:2023/01/14
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
這個需求其實還滿常見的。有些單位會要求合作業者或是公司同仁只能透過指定 IP 連入公司主機或網路,減少資安問題。
不過我以為大家都是指定雲端主機來當作這個「跳板主機」,但上次與朋友聊到怎麼不能出來小聚的原因,才知道他把這個客戶要求的 IP 指定成他家上網的固定 IP,所以變成他只能在家作業。
聽起來少了個移動的彈性對吧?
就是很直覺的聽到要一個固定 IP 來授權,就給了「當前使用的固定 IP」,所以變成下面這樣:
我家固定IP -> 客戶公司主機
但其實可以是這樣:
不管我在哪的IP -> 跳板主機的固定IP -> 客戶公司主機
一方面不用因為要兼顧移動性,反而在自己家搞個跳板相關應用又或是直接懶得搞,坐鎮家裡XD
另一方面也是避開了家用網路,可能會因為突然挖馬路挖斷了什麼服務中斷導致連線異常的問題。
本文簡單筆記我的作法!
前置準備(情境條件)
- 使用 SSH 連線,不開啟密碼授權、僅使用 公開金鑰認證(Public Key Authentication)
- 跳板主機
mxp_tw
IP:33.33.33.33
- 我當前上網主機
localhost
IP:11.11.11.11
- 客戶公司主機
target
IP:22.22.22.22
- 客戶公司主機防火牆設定僅接受
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"
- 指令處理版本
ssh [email protected] -i /path/to/mxp_tw.key
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
,所以可以不只是跳一層,中間要跳幾層就是由目標往回推每一個路徑上的連線主機,補上設定資訊。
參考資料:
- SSH ProxyCommand example: Going through one host to reach another server
- ProxyJump is safer than SSH agent forwarding
發佈留言