跳到主要內容

SSH tunnel 方式連結限制區域的伺服器

SSH tunnel 方式連結限制區域的伺服器

自從進了前公司,好久沒有時間好好的更新部落格內容了。近期離開待了將近兩年的公司,和好朋友一起創立了新的新創公司,一起在農業上用技術來幫助返鄉的青小農,希望讓用更有溫度的數據來降低青農們的門檻。

新的開始新的期待,希望自己能繼續保持赤子熱忱,把研究過的方法記錄下來分享。

在這個資安即國安的時代(嗯…那是政府的口號),大部分的伺服器都會有許多的安全設定,無論是更新的規則或是防火牆的限制等等。會限制在某個網段甚至是某個 IP 才能進行連線某些服務,對於常常喜歡加入文青到咖啡廳 Out coding 的宅宅,還是要想辦法鑽回去連線伺服器。

如果在限制區域中有一臺能對外開放連線的 SSH 機器,我們便能夠使用 SSH Tunnel 的方式橋接回去,透過通道連結到目標伺服器。說穿了其實這臺對外的機器就是跳板,我們可以利用這個跳板以類似 Port forwarding 的方式,將遠端伺服器的 IP 與 Port 對應至本機的一組位址與 Port。

Linux 下的連接方式

大部分的 Unix-Like 系統都有內建 SSH 的 Client 指令,我們只需要在 terminal 下指令就可以達到目的。

指令如下:

$ ssh -N -f -L LOCAL_PORT:DEST_HOST:DEST_HOST_PORT SSH_USER@SSH_SERVER_IP

SSH 參數說明
-N: 連接後不執行任何的遠端指令
-f: 連線後在背景執行
-L port:host:hostport: 在 Client 與 Server 建立一組 secure tunneling

LOCAL_PORT:本機連接埠
DEST_HOST:目標連線伺服器位址
DEST_HOST_PORT:目標連線伺服器埠號
SSH_USER@SSH_SERVER_IP:做爲跳板的機器連線

Example:

$ ssh -N -f -L 33890:192.168.1.100:5022 username@168.95.1.1

上述的例子,會透過 168.95.1.1 這臺跳板機器,將限制區域內 192.168.1.100,Port
為 5022 建立通道至本機的 33890 Port。可以透過 netstat 指令來觀察是否有建立成功。

$ netstat -ntulp | grep 33890
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:33890         0.0.0.0:*               LISTEN      5223/ssh            
tcp6       0      0 ::1:33890               :::*                    LISTEN      5223/ssh 

關閉通道

先查詢目前我們開啓的通道是在哪一個 process id (pid) 執行,再透過 kill 指令刪除執行中的 process 即可關閉。

查詢 ssh 服務與在 33890 port 執行的 process,取得 <PID>。

$ ps aux | grep ssh | grep 33890

以 kill 指令刪除指定編號 <PID> 的 Process。

$ kill <PID>

以 netstate 檢查是否還有在執行。

$ netstat -ntulp | grep 33890

留言

這個網誌中的熱門文章

USB裝置無法安全移除解決之道

USB裝置在日常生活的應用上已經越來越普遍,相機、隨身碟、MP3、外接式硬碟等等。當我們在使用了這些設備後,專家都會建議我們一定「 安全的移除硬體裝置 」,尤其在使用了外接式儲存設備以後,正確安全的移除才不會造成設備或資料的毀損,尤其是資料的毀損可就嚴重了。 有時候存取傳送完這些設備後,在移除硬體裝置時會出現「 '一般磁碟區'裝置無法立即停止.請稍候再試 」,這表示還有應用程式還在存取這個裝置,造成無法順利的移除,通常我們只要把存取該裝置的應用程式關閉或移除,有部分軟體需要先把瀏覽到別的資料夾(非外接裝置的資料夾)例如:使用AcdSee、Total Commander之類的軟體。 很多人即使關掉所有的應用程式,無法安全移除的問題還是存在。這是因為系統寫入快取的問題,當寫入資料到外接設備時有些檔案並沒有真正的寫入,而是暫時放到快取,當快取快滿或是要關機時才真正的寫入到外接設備,有時候系統會莫名的忘了寫入...XD,在移除裝置時就會出現上述無法立即停止的錯誤訊息,在網路上爬了一些文,通常這類事件只要 登出再登入 目前的系統使用者帳號就可以獲得解決了。 當然,如果要一直登出登入登出登入,應該會氣到想砸電腦(像辦研討會時,每個講者都是拿USB來插來插去 >. unlocker (236 kb),這款Freeware的軟體,讓你將不需要再當登入登出狂人。 Unlocker 軟體性質: Freeware 最近版本: 1.8.6 作業系統: Windows 2000 / XP / 2003 / Vista 語言界面: 繁體中文 原創公司: Cedrick 'Nitch' Collomb >> Download 滑鼠右鍵 ,在右鍵選單中會多了一個Unlocker的選項,點選Unlocker,這時就會看到是什麼程式或程序還在使用此設備,點選該程式選「 解鎖 」,完成後應該就可以順利在系統列上安全的移除硬體裝置了。

Word的合併列印如何出現「千分位」符號

今天樓下的同事突然問我一個問題,合併列印的時候如何顯示「千分位符號」(逗號),就是12 , 300。在Excel我們可以很容易的為儲存格裡的數字加上千分位的標記,但是儲存格實際儲存的還是只有數字,那個千分位符號是Excel給我們看的一種「格式」。 當我們在Word裡使用Excel做好的報表來合併列印的時候,Word會最真實的將這個數字欄位給讀出來,呈現在合併列印的欄位數值裡,無論在Excel理事不是有設定千分位符號,在Word合併列印後卻沒有出現,所以我們同樣的必須給他加上格式。 Word裡加上格式並不如Excel裡按一下就完成,加上逗號的千分位格式方法如後: 1.在Word裡插入合併列印的欄位變數。 2.在變數上按滑鼠右鍵,選擇「切換功能變數代碼」(也可以直接按Alt+F9),變數會由 經費 >> 變成 { MERGEFIELD "經費" } 。 3.加上格式就是把 { MERGEFIELD "經費" } 在}前加入數字格式參數 /##,###,會成為 { MERGEFIELD "經費" /# ##,### }(這裡指定五位數,以此類推) #:這個格式項目會指定要在結果中顯示的必要位數;如果結果不含該位數的數字,則 Word 會顯示一個空格。 0:這個格式項目會指定要在結果中顯示的必要位數;如果結果不含該位數的數字,則 Word 會顯示 0 (零)。 4.預覽內容,就可以發現千分位(逗號)出現,如果數值有零的話,最好可以換成 /# ##,## 0 ,避免空格出現。 數字格式參數請參考 Microsoft Office Online 。

使用者只能 SFTP 登入自己的家目錄

使用者只能 SFTP 登入自己的家目錄 老師的電腦動畫課堂的期末作品,是開放讓學生透過 FTP 上傳自己的作品及網頁至實驗室的伺服器,由於 FTP 是明碼的封包傳輸於最近升級系統後,便考慮改用 SFTP(SSH File Transfer Protocol)來提供上傳的服務。 提供 SFTP 上傳的同時,希望使用者和以前一樣只能使用 SFTP 無法使用 SSH 登入伺服器。SFTP 為 SSH 的檔案傳輸服務,預設建立帳號的時候使用者同時可以使用這兩種服務。透過 SFTP only + Chroot 設定我們能限制使用者僅能 SFTP 並且無法離開自己的家目錄去到處閒晃。 安裝 OpenSSH 如果安裝的是 Ubuntu Server 應該在安裝過程會安裝 openssh-server 套件,沒有的話可以利用下面的指令安裝。 $ sudo apt-get install openssh-server 新增一個給 SFTP 使用的群組 sftpaccess $ sudo groupadd sftpaccess 修改 OpenSSH 設定檔 編輯 /etc/ssh/sshd_config 設定檔,在約 77 行的地方找到 Subsystem sftp /usr/lib/openssh/sftp-server 註解此行並修改為 Subsystem sftp internal-sftp 。 $ sudo vim /etc/ssh/sshd_config #Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp 在檔案的尾端加上下面的片段 Match group sftpaccess ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 建立新的使用者並加入 sftpaccess 群組 在設定檔中,我們設置了 sftpaccess 這個群組套用要做 ChrootDirectory 的設定,所以我們將要限制的使用者,加入這個群組中。 $ sudo useradd ...