Contents

Linux - SSH 透過 Proxy jump (Bastion Site) 至遠端主機

Bastion 主機( 堡壘機 )是常見的一種在防火牆後面可以訪問到各主機的機器,但是透過 Proxy Jump 方式可以直接於 Client 藉由堡壘機跳躍至目的主機,實現進階的 ssh 技巧。

https://hackmd.io/_uploads/rJyqsaqIp.png
From software.com

1. ProxyJump

依據 ssh man 手冊 -J 參數指出,目的主機可以先透過跳轉主機建立連線來做 TCP 的 forwarding 至目標主機。

-J destination Connect to the target host by first making an connection to the jump host described by and then establishing a TCP forwarding to the ultimate destination from there.

原本步驟需 ssh 至 bastion 後再 ssh 至 serverA ,可以改成一行指令解決。

2. ssh ProxyJump 指令

2.1 單一主機

1
ssh -J <bastion-host> <remote-host>

EX. Client 只開放允許 bastion 主機連線, serverA 有防火牆規則阻絕只能透過 bastion 主機連線。

2.2 多重主機

1
ssh -J <bastion1>,<bastion2> <remote>

EX. Client 只開放允許 bastion 主機連線, serverA 有防火牆規則阻絕只能透過 bastion 主機連線, serverB 只能透過 serverA 連線。

3. 設定 ssh_config 檔案

上述透過指令很方便可以達成,如果每次都有多台不同主機要連線,可以藉由設定 ssh_config (~/.ssh/config)來快速自動連線,而不用輸入一長串指令。

1
2
3
4
5
6
7
8
### The Bastion Host
Host bastion-host-nickname
  HostName bastion-hostname

### The Remote Host
Host remote-host-nickname
  HostName remote-hostname
  ProxyJump bastion-host-nickname

EX. Client 只開放允許 bastion 主機連線, serverA 有防火牆規則阻絕只能透過 bastion 主機連線。

1
2
3
4
5
6
7
8
### The Bastion Host
Host bastion
  HostName bastion.example.com

### The Remote Host
Host servera
  HostName servera.example.com
  ProxyJump student@bastion

4. 進階操作

掌握 ssh ProxyJump 可以與 ssh Port Forwarding 組合技操作來達成Port 轉發

EX. Client 只開放允許 bastion 主機連線, serverA 有防火牆規則阻絕只能透過 bastion 主機連線,將 serverA 的 8080 port 來拉至 Client 端上使用。

1
ssh -L 8080:127.0.0.1:8080 -J [email protected]  [email protected]

詳細使用 Port Forwarding 請參考 HowHow 的Linux - 設定 SSH Tunneling (Port Forwarding) 文章。

5. 小結

除了 ssh 之外也能將其換成 scp 的 ProxyJump 來操作 EX. scp -o 'ProxyJump [email protected]' ExampleFile.txt [email protected]:/tmp/ ,背後原理都是透過 ssh 協定來操作,是一種非常方便且好用的技巧。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!