2013-04-10 59 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);