資訊系統/架構/產品‎ > ‎KGQ‎ > ‎GMDS相關文章‎ > ‎GMDS‎ > ‎

GMDS針對遠端的支援方式

張貼者:2011年1月18日 下午7:18Wei-Xiuang Wang   [ 已更新 2021年1月23日 上午10:31 ]


很多有遠端控制需求的地方都會採用VNC而不使用微軟自帶的遠端桌面服務, 各有各的理由不多說,
而許多接觸本平台的人員都會摳嗶TCP_FS和配套的專用VNC帶回家用,
因為守著一台電腦控制眾多電腦的需求下, 這真的太好用了... 那麼這裡分享一個秘密吧!
由於從VISTA之後VNC無法透過服務方式取得遠桌畫面, 所以改於啟動資料夾或是排程方式於登入之後執行,
但是有個缺點就是不可以鎖定系統, 其實有個方式可以解決,
這有一個現成的工具, 那就是PsTools裏面的PsExec這支工具, 說是遠端管理工具包, 那把本機當遠端使用就可啦,
所以如果本來要執行的命令如下(路徑位置自行參酌比對)

S:\tool\vncsrv.exe -tfs 192.168.1.110

那就改用這樣的方式執行(路徑位置自行參酌比對)

S:\PsTools\PsExec.exe -s -d -i "S:\tool\vncsrv.exe" -tfs 192.168.1.110

也就是於登入的情形下, 取得SYSTEM權限來執行 vncsrv 就OK囉!!
以這種方式完成連線的VNC遠端桌面, 於鎖定畫面仍然可以持續監控, 也能輸入登入密碼解鎖,
愛用VNC的人就不用再勉強使用微軟遠桌了!

PsExec於第一次執行時會有一個不負責任宣告, 若完全不想看到也可以先加機碼使之忽略

reg add "HKCU\Software\Sysinternals\PsExec" /v "EulaAccepted" /d 1 /t REG_DWORD /f

關鍵都點出來了, 那要如何自動化還是簡化就隨各自的創意去應用吧!

PsTools這個遠端管理工具包裏面有一堆工具而PsExec也有x86和x64的版本,
以前面所說取得SYSTEM權限執行程式的功能於x64的系統下也是跑x86的版本就能完成任務,
也就是只要有x86的版本就通通可以用了, 如果想直接抓這支程式就好也可從這裡: PsExec_v2.2.rar

如果覺得的PsExec太IT了不夠專業, 那就改用RunAsSYSTEM這隻程式,
執行檔是 RunAsSYS.exe(下載), 上面跑VNC的方式就變成如下(路徑位置自行參酌比對)

S:\PsTools\RunAsSYS.exe /a "S:\tool\vncsrv.exe" -tfs 192.168.1.110

其中 /a 的參數是要求非同步方式, 因為VNC是要一直跑而不結束的,
所以不使用預設的等待模式運作, 如果不下 /a 這個參數, 就會留著一個console視窗需自行關閉,
如果要把RunAsSYS應用在批次檔或是console中操作, 那就可以不要用 /a 參數,
使用預設的等待模式(類似 start /wait )運用於命令提示之下會發現非常的實用!
總之以RunAsSYS替代PsExec會變得更有效率, 整體運作過程更是流暢平順,
RunAsSYSTEM這程式如果參數沒指定要執行的程式, 預設是會跑 %windir\System32\cmd.exe
 ( 被引用為漏洞真無言 研究人員發現Windows Vista中的漏洞, 何況這還是Win10能用的程式 )

另外也有純Win的版本 RunAsSYSw.exe(下載), 用法和 RunAsSYS.exe 一模一樣,
如果希望動作隱形不要有跳出黑視窗則可以改用此版, 特別是在排程運作的設計上特別有用,
往往有些程式設計的不靠譜, 為預防程式掛掉, 會在排程中透過週期或多次排程的方式確認程式有在運作,
這時, 排程會在設定中使用規則: 如果工作已在執行中套用不要啟動新的執行個體,
要能適用這種規則的話就是要跑等待模式(也就是不要用 /a 參數),
不然此情況下如果用console版的會留一個黑視窗在桌面上豈不是很礙觀瞻...
因此改用 RunAsSYSw.exe 來替代就能避免這樣的尷尬了!

要能取得SYSTEM權限至少需具有系統管理員的身份,
可以參考視頻: 以RunAsSYSw示範於相容性中設定管理員權限

以下離題, 純粹記錄一些觀察現象...

在這不知為何要Win10的時代, Win10的設計雜亂無章, APP化+搭NET化使所有的應用變慢了, 相容性也變差了,
用RunnAsSYS去試試開小算盤(calc.exe)和記事本(notepad.exe)就知道像小算盤這樣的應用程式已經不純潔...
而不純潔的console工具也是先透過Win32應用殼層去開啟新console視窗, 這使得RunnAsSYS不能銜接stdio正確運作,
可以由 控制台/程式和功能/開啟或關閉Windows功能 將Telnet Client勾起來把telnet.exe選裝進系統,
再於命令提示字元下分別用RunnAsSYS和RunnAsSYSw去試試呼叫Telnet.exe, 大概就知道意思了!
若有需要以SYSTEM身份使用這類不純潔的應用程式和工具時, 使用RunnAsSYSw來替代RunnAsSYS才能正確操作

如用timeout.exe這隻更簡單的批次檔小工具來觀察, 於Win10上使用出現「錯誤: 不支援輸入重新導向,請立即結束處理程序。
雖然翻譯文怪怪的(可以改看原文), 但能明確瞭解到為何前面會提到是stdio的問題~而Win10看似已經完全放棄支援了!

ą
Wei-Xiuang Wang,
2011年1月18日 下午7:29
註解