ssh2_exec没有执行简单的命令

时间:2013-04-10 09:27:36

标签: php windows libssh2

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。如果您有任何提示,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:1)

首先,您不太可能使用ssh2_connect连接到Windows服务器,因为SSH不是通常用于连接到Windows的协议,也不是任何Windows中的可用项目安装。 其次,确保在Windows服务器上创建了用户“root”,因为默认情况下它不存在。

<强>替代地 如果您实际连接到Unix / Linux服务器 FROM Windows框,那么您尝试在其上运行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 command。或者您可以以管理员身份运行您的Web服务器,这很容易做到并且非常糟糕的安全性

通过在Windows上安装SSH服务器(What are some good SSH Servers for windows?),您基本上可以实现上述尝试 - 之后您必须使用存在的用户登录服务器,并使用密码对于该用户(或创建用户'root'并使用它)。 根据您的SSH服务器安装,运行命令C:\Program Files\CCleaner\CCleaner.exe可能会按照上述方式运行。

在Linux中有更多关于如何解决这个问题的例子,不同的方法有不同的优点和缺点。

答案 1 :(得分: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);