使用VNC+SSH建立安全的遠程桌面訪問WINDOWS服務器


用了一段時間的MONO,現在MONO也支持了ENTITY FRAMEWORK 6。但是實際上在LINUX環境里用MYSQL還是會有很多坑。並且之前在網絡游戲服務端SCUT上擴展一些功能時候也遇到了一些因為MONO和.NET行為方式不一致的坑耗掉了不少時間。使用mono雖然可以節約性能開銷,但是犧牲掉了windows套件本身的便利。微軟開發工具的優勢本來就在開發時候的方便,因此想開發的爽的話,還是老實用WINDOWS SERVER和SQL SERVER好了。而且windows server似乎也有無桌面的運行模式,具體怎么用試驗過了再來發文吧。

windows的遠程桌面只有用戶名密碼的方式登錄,安全性並不高,不過LINUX上方便的工具很多都有WINDOWS的移植版本了。

這次使用了SecureCRT和RealVNC服務端和Cygwin在windows server服務器上搭建了使用RSA秘鑰文件加密登錄和SSH加密信道的遠程桌面。

首先是服務端的配置:

首先在cygwin網站上下載最新版的cygwin,根據機器的CPU和操作系統類型:

下一步到如下界面設置CYGWIN安裝到的目錄,這里也是在cygwin控制台里根路徑對應的位置:

這里是下載的包的緩存,增加軟件包的時候需要重新運行安裝程序:

 選擇安裝源,最上面的源應該是最新的,國內也有一些鏡像但是有些軟件包似乎版本不是最新還有缺失。推薦使用網易的源,在我這里速度很快:

163的鏡像:http://mirrors.163.com/cygwin/ 

在下面粘貼后ADD即可

 

這里搜索openssh,git, bash-completion以及bash-compelion-devel

 搜索后點擊前面的skip或者default改成要安裝的版本號

 

選好所需軟件包之后一直下一步等待安裝。

cygwin安裝成功后, 在管理員特權下執行bash終端. 我們先對git server端進行設置.
執行ssh-host-config, 接下來腳本會引導用戶進行設定.
1. *** Query: Should StrictModes be used? (yes/no)
 這里選擇yes
2. *** Query: Should privilege separation be used? (yes/no)
 這里選擇yes, Cygwin會為我們建立一個特殊的windows賬戶用來執行sshd服務.
3. *** Query: Do you want to install sshd as a service?
    *** Query: (Say "no" if it is already installed as a service) (yes/no)
 選擇yes, 會注冊一個sshd的服務, 以執行server.
4. *** Query: Enter the value of CYGWIN for the daemon: []
 這里寫ntsec
5. *** Info: This script plans to use 'cyg_server'.
*** Info: 'cyg_server' will only be used by registered services.
*** Query: Do you want to use a different name? (yes/no)
 Cygwin要建立一個cyg_server賬戶以運行sshd服務, 這里可以選擇為該賬戶另取名字或者使用default. 我們選擇no.
6. *** Query: Create new privileged user account 'DMC-PC\cyg_server' (Cygwin name: 'cyg_server')? (yes/no)
 yes, 確定建立賬戶. 之后輸入密碼, 完成config.
 
設定完畢后, 在/etc下面多出來一個sshd_config文件, 打開該文件, 將如下item的注釋取消,
RSAAuthentication              yes
PubkeyAuthentication         yes
新版的openssh原配置文件可能並沒有RSAAuthentication這行,我是自己加上了它,還沒測試是否對使用有影響。
openSSH配置完畢之后,在cygwin終端輸入:
net stop sshd
net start sshd
即可重啟sshd服務。如果出現了什么錯誤,可以到服務端windows事件日志里查看錯誤詳細信息。
 
秘鑰可以在服務端生成,不過我更習慣用SecureCRT生成:
SecureCRT的安裝破解這里就先不贅述了,連接的時候使用服務器ip和windows的用戶名:
選中publickey然后單擊properties,進入公鑰設置界面,這里可以生成公鑰:

點擊Create Identity File創建公鑰,key type選擇RSA Passphrase可以不填 key length 1024或者2048都可以。

 選擇OpenSSH類型的秘鑰,保存在自己電腦安全的位置(不要共享出去的地方):

登陸時候選擇公鑰並且登陸過程會自動讀取公鑰同目錄下無擴展名的私鑰,因此不要改名或者移動私鑰

這樣設置完成后秘鑰對生成完畢,服務器上只需要保存公鑰,即有pub擴展名的文件。

直接在這里upload到服務器總是失敗,我后來是使用secureFX上傳公鑰到服務器上,位置是~/.ssh/authorized_keys 每個用戶自己的文件夾下都有各自的公鑰文件,多個公鑰使用>>操作符追加到authorized_keys文件即可。

現在去掉SecureCRT的客戶端密碼登陸方式,嘗試秘鑰文件登陸成功后在服務器上把/etc/sshd_config這一行注釋解除並設置為PasswordAuthentication no關閉服務器密碼認證
 
隨后打開SecureCRT連接屬性,如下把5900端口添加到端口映射

 

在服務端安裝RealVNC Server

 在服務里把VNC Server改成手動啟動 然后創建一個批處理用於啟動VNC服務:

net stop winvnc4
sc start winvnc4 -localhost :1
pause

 

這里主要是為了傳遞localhost :1參數,讓VNC在SSH隧道的本地端口等待連接

然后把這個批處理加到開始,或者其他開機自啟動的位置

把服務器當前管理員賬戶設置為進入系統后直接登錄,這樣就可以保證開機之后啟動VNC服務。試了在注冊表和WIN.INI里在登錄前啟動批處理的方法,然並卵了。

參考這里設置自動登陸:http://jingyan.baidu.com/article/7e440953eabd742fc0e2efae.html

 

客戶端先開啟SecureCRT用之前設置的連接登陸 保持這個連接打開直到退出遠程桌面

開啟VNC Viewer,連接localhost :1

然后一切正常的話你就可以看到VNC遠程桌面了 重啟幾次測試一下不靠windows遠程桌面是否能登陸。如果可以的話就可以用VNC關閉windows遠程桌面,到此你就可以保證只有擁有2個秘鑰的計算機才能遠程登陸windows桌面了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM