[Linux] SSH Tunnel
前情提要 由於中華電信最近除了海底纜線斷掉之外,連內部路由都有問題,造成部分用戶的 socket 會連不到我們架設的伺服器,於是想到把自建的 socket server 從機房中複製一份到 GCP 上面。 但由於安全性的問題,資料庫是在機房內網,且沒有對外 IP,還有 redis 也是在機房內網,同樣沒有對外 IP,這時候該怎麼辦? 厲害同事介紹了一招,SSH Tunnel。 SSH Tunnel 單純就是幫忙做 Port Forwarding。 假設我現在我有台主機 A,需要連線到內網的資料庫,但只有主機 B 才可以直接透過內網連線到資料庫,則我們可以透過 SSH Tunnel 將內網資料庫的 3306 port,對應到主機 A 的自定義 port,流量則是透過主機 B 轉給內網的資料庫。 定義一下名詞: 主機 A => socket server 主機 B => ap 資料庫 => db 1. 先在 db 內開一個專門用來 ssh 的帳號,假設叫 tunneluser 2. 在 db 開的 tunneruser 的 ~/.ssh/authorized_keys 內新增 socket server 的 public key 3. 在 ap 內開一個專門用來 ssh 的帳號,假設叫 tunneluser 4. 在 ap 開的 tunneruser 的 ~/.ssh/authorized_keys 內新增 socket server 的 public key 5. 接下來在 socket server 上的 ~/.ssh/config內新增 Host ap HostName 1.2.3.4 User tunneluser Port 22 IdentityFile ~/.ssh/id_rsa Host db HostName 2.2.3.4 Port 22 User tunneluser ProxyCommand ssh -q -W %h:%p ap IdentityFile ~/.ssh/id_rsa 6. 接著在 socket server 中輸入 nohup ssh -N -L 3306:localhost:3306 db & nohup 跟後面的 & 是為了把 ssh tunnel 放在背景持續執行 第一個 3306 是 so