2013-04-10 460 views
5
我有一個問題的噩夢

ssh_exec()拒絕在Windows中執行命令。
這裏是我的代碼:ssh2_exec不執行簡單的命令

<?php  
$connection = ssh2_connect('localhost', 22); 
ssh2_auth_none($connection, 'root'); 

$stream = ssh2_exec($connection, 'C:\Program Files\CCleaner\CCleaner.exe',FALSE);  
?> 

它讓我看到以下警告:Unable to request a channel from remote host in。如果您有任何提示,請告訴我。謝謝。

+0

什麼是增加這個結果:'如果($連接!){ 模具( 「連接失敗。」) }' – 2015-10-02 17:18:56

回答

1

首先,您不太可能使用ssh2_connect連接到Windows服務器,因爲SSH不是通常用於連接Windows的協議,也不是任何Windows安裝中的可用項目。 其次,確保你已經在Windows服務器上創建了用戶'root',因爲它默認情況下不會存在。

或者 如果你實際上是連接到Unix/Linux服務器FROM Windows中,那麼事實是,你正試圖在其上運行Windows命令(「C:\ Program Files文件\ CCleaner的\ CCleaner.exe「)將失敗。您只能在遠程服務器上執行當前的命令,而以「C:\」開頭的任何命令顯然都會失敗,因爲Linux與Windows有完全不同的文件系統結構。

因此,從上面看起來你可能嘗試使用用戶名「根」,沒有密碼(用於連接到Linux服務器上的代碼,根據PHP.net手冊(ssh2_auth_none

嘗試「無」身份驗證通常會(也應該)失敗

但正如你所說,你正試圖在Windows中執行命令,被連接到與主機名稱服務器「localhost」的 - 也許你實際上是在Windows上運行它,並試圖使用SSH連接到Windows服務器 - 這是毫無意義的,因爲上面顯示的PHP代碼已經在Windows服務器上執行了,這使得SSH連接完全是多餘的,除了試圖用提升的特權執行命令(如'root')。

如果你試圖執行遠程使用PHP 作爲管理員用戶,這可能是一個壞主意,那麼你可以考慮結合使用function.exec.php命令與Windows runas command命令。或者你可以只運行Web服務器管理員,這是兩個很容易做到,安全非常糟糕。

基本上可以通過在Windows(What are some good SSH Servers for windows?)上安裝SSH服務器來實現上面的嘗試,然後您必須使用存在的用戶登錄到服務器,然後使用該用戶的密碼(或者創建用戶'root'並使用它)。 根據您的SSH服務器安裝,運行命令C:\Program Files\CCleaner\CCleaner.exe可以按照上述方式工作。

有如何去這在Linux的更多的例子,不同的方法有不同的優點和缺點。

0
<?php  
$connection = ssh2_connect('localhost', 22); 
ssh2_auth_none($connection, 'root'); 

$stream = ssh2_exec($connection, 'C:\Program Files\CCleaner\CCleaner.exe', false); 
stream_set_blocking ($stream, true);