簡體   English   中英

ssh2_exec 不執行簡單命令

[英]ssh2_exec not executing simple command

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

<?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 .

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

或者,如果您實際上是Windows 機器連接到 Unix/Linux 服務器,那么您嘗試在其上運行 Windows 命令('C:\Program Files\CCleaner\CCleaner.exe')的事實將失敗。 您只能在存在的遠程服務器上執行命令,任何以“C:\”開頭的命令顯然都會失敗,因為 Linux 具有與 Windows 完全不同的文件系統結構。

因此,從上面的代碼看來,您可能正在嘗試使用用戶名“root”連接到 Linux 服務器而沒有密碼(根據 PHP.net 手冊( ssh2_auth_none

嘗試通常會(並且應該)失敗的“無”身份驗證。

但是正如您所說,您正在嘗試在 Windows 中執行命令,並且您正在使用主機名“localhost”連接到服務器 - 也許您實際上是在 Windows 上運行它,並且只是嘗試使用 SSH 連接到 Windows 服務器- 這是沒有意義的,因為上面顯示的 PHP 代碼已經在 Windows 服務器上執行,這使得 SSH 連接完全多余,除非嘗試以提升的權限(作為“root”)執行命令。

如果您嘗試以管理員用戶身份使用 PHP 遠程執行命令,這可能是個壞主意,那么您可以考慮將function.exec.php命令與 Windows runas 命令結合使用。 或者您可以只以管理員身份運行您的 Web 服務器,這既容易做到又對安全性非常不利

通過在 Windows 上安裝 SSH 服務器(Windows 有哪些好的 SSH 服務器? ),您基本上可以實現上述目標 - 之后您必須使用現有用戶登錄服務器,並使用該用戶的密碼(或創建用戶“root”並使用它)。 根據您的 SSH 服務器安裝,運行命令C:\Program Files\CCleaner\CCleaner.exe可以按照上述方式工作。

在 Linux 中有更多的例子來說明如何做到這一點,不同的方法有不同的優點和缺點。

<?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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM