使用SSH+VNC實現安全的Linux遠程桌面管理
VNC可以對數據進行壓縮,使得傳輸的數據量比直接用SSH加密的小,但是缺點有一到兩次機會讓同一網段的計算機用sniffer竊聽到用戶名和密碼。認證之后的數據可以進行加密傳輸,所以使用過程中如果經過配置,則是安全的,否則傳輸內容不能保證完全保密。必要時可以通過SSH進行加密端口映射來保證傳輸用戶名和密碼的時候也是加密的,這一操作占用的額外帶寬是極少的。
至于SSH保護VNC的安全,需要使用SSH的端口轉發功能。一般在客戶端使用的是Linux的時候,可以先用SSH建立鏈接,語法上應當添加“-L 本地端口:本地地址:遠程端口 遠程地址”這一附加參數,比如說本地是X.Y.Z.W,服務器是A.B.C.D,要轉發的端口本地的是5901,遠程的也是5901,那么命令應當是:ssh -L 5901:X.Y.Z.W:5901 A.B.C.D
其他的參數多數可以同時使用。執行完畢后就已經創建了服務器5901端口和本地5901端口的加密隧道。假設要鏈接的服務器上運行的VNC桌面號是2,則繼續執行如下命令:vncviewer A.B.C.D:2
這樣打開的VNC窗口所有數據都經過了SSH的加密。
由于一般管理情況下多采用SSH的Windows客戶端,也就是SSH Secure Shell,所以下面介紹如何配置Windows下的SSH Secure Shell來配合VNC實現安全的Linux遠程桌面管理。
首先,在SSH Secure Shell的主界面上選擇Settings下的Tunneling,如圖所示。
然后,選擇添加一個配置,如圖所示,其中Listen是本機端口,Destination是遠程地址和端口,Display可以設定自己的描述。
為SSH Secure Shell設定Tunneling
Tunneling設定的具體選項
最后,再運行vncviewer來鏈接即可。特別值得注意的是:此處Server的地址不是需要連接的VNC Server的地址,而是前面設定的本機的SSH偵聽端口的地址,因為所有通往VNC Server的流量都需要先經過本機的SSH進行轉發,如圖所示,一般設定為localhost加端口即可,該端口就是在圖中設定的SSH的偵聽端口。
使用Windows中的VNC Viewer連接Linux端的VNC Server
下圖清晰地給出了使用Wireshark對上述通信的流量進行抓包的結果,可以看到,從客戶端去往服務器端的VNC流量,均采用SSH協議進行了加密傳輸,因此針對傳統的未經過SSH加密處理的VNC通信來說要安全很多,能夠有效地避免竊聽和中間人攻擊:
針對上述通信流程的抓包結果顯示