上一篇講到在特殊的環境:
在這個情況下,本機的開發環境無法直接連到QT的Database,必須透過跳板的設定才行。
不過我們想要連線QT測試環境的DB前,有幾件前提是必須達成的,我們來一一檢視:
-
我們的本機電腦可以透過ssh的方式連到Linux系統的跳板機並可成功登入。
-
Linux系統的跳板機可以直接連線到DB的機器,並且可成功登入DB系統。
第一點很好確認,問題是第二點,目前最好的確認方式是透過指令來測試連線,也就是說:
-
先利用ssh登入Linux系統(不需要最高權限)。
-
在Linux系統下指令連線DB。
這個因為要在Linux上下指今,而且每個資料庫的連線方式都不一樣,所以只能大家各自努力了。
我們假設已經達成上述的二個前提,接下來我們就要來實作跳板了,為了解釋方便,我們將上圖給予IP後,如下圖:
在實作前,我們大概來瞭解一下等一下會發生的事:
等一下我們會
- 透過192.168.1.1的ssh,連接到172.16.1.1的Linux系統上,此時是透過ssh的22 port連入。
- 再來設定好跳板後,我們會透過172.16.1.1的3306 port(假設是用MySQL的資料庫,所以Port是3306),連接到172.16.31.2。
所以172.16.1.1的3306 port可以不用開啟。
說了這麼多,重點是該如何實作,所以接下來我們來實作吧!!
準備工具:Putty(Windows),終端機程式(Linux base or MAC)
下列步驟適用Windows系統:
-
開啟Putty並輸入連線資料
-
左方Menu切換到Connection→SSH→Tunnels,並輸入資料(參考下方圖示)
-
這個設定的意義分別是:當我們使用本機的13306Port時,請幫我們導向176.16.31.2:3306。
Source port : 指定本機的Port
Destination : 連到那一台機器的那個Port
-
記得按下「Add」的按鈕,看到下方框框內的資料,代表設定成功。
-
按下Open開啟連線。
-
輸入登入的帳號密碼,登入172.16.1.1成功時,即代表跳板設定完成。
下列步驟適用Linux base系統:
-
開啟終端機程式
-
輸入指令:(@前的root代表跳板機的帳號,需自行變更)
ssh root@172.16.1.1 -L 13360:172.16.31.2:3360
其中-L 為本次指令的重點,跟Putty設定的Local是相同的意思。
-
輸入密碼後,登入172.16.1.1成功時,即代表跳板設定完成
...設定完成了,好像超簡單的。沒錯,就是這麼簡單,讓我們來看看設定完成後要怎麼使用。
跳板的應用
上述不管是指令,或是Putty的設定,主要的設定意義是:
凡是呼叫本機 (loaclhost)的13306 Port,都會被導到172.16.31.2的3306 Port;其中13306的Port並無特別意義,只要本機沒有在使用的Port皆可。
所以在GUI設定上的如下:
原本的設定
變更為(注意Hostname還是指向本機)
-
當我們指定本機的13306 Port時,因為跳板設定的關係,這個指令會從本機送到172.16.1.1(因為我們SSH是連到這一台主機)後,再連線到172.16.31.2(因為我們是這樣設定的),所以剛剛說要確認172.16.1.1可以連線至172.16.31.2的資料庫的原因即為如此。
透過這樣的設定,我們可以直接利用GUI工具,來操控遠端的資料庫;也可以利用GUI工具所提供的資料庫備份功能,備份完後將資料直接存在本機。
這裡要注意的一點,因為跳板是透過172.16.1.1來傳送資料的,所以如果本機與172.16.1.1的連線被中斷的話,那麼跳板設定也會跟著失效。不過因為本機與172.16.1.1有資料在傳輸,所以也不用擔心那putty視窗什麼事都沒做時,會被踢出去。
跳板的還應用不只如此,也可以應用在程式上,下方是程式應用的範例:
原本的設定
變更為
單純變更資料庫連線的設定,就可以將資料庫的來源指向QT環境,同時可以在本機進行Deubg、停在中斷點、看變數資料...等。不過要注意一點,「儘量不要有寫入的動作」,因為你現在動的資料庫已經不是本機的資料庫了,如果是在正式機上,就更要小心,尤其要注意程式是否有寫定時機制去寫入資料,如果有,記得先拿掉後再啟動程式,否則你真的會被叫去罰站。