ssh2_exec不执行简单的命令

我有一个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有完全不同的文件系统结构。

所以从上面的代码看起来好像你可能试图连接到一个Linux服务器使用用户名“root”没有密码(根据PHP.net手册( ssh2_auth_none :

尝试通常将(而且应该)失败的“无”认证。

但正如你所说的,你正在尝试在Windows中执行一个命令,并且你正在连接到主机名为“localhost”的服务器 – 也许你实际上正在Windows上运行这个命令,而只是试图使用SSH连接到Windows服务器 – 这是毫无意义的,因为上面显示的PHP代码已经在Windows服务器上执行了,除非试图用提升的特权执行一个命令(如“root”),否则SSH连接将完全是多余的。

如果您试图以管理员用户的身份远程执行命令,这可能是一个坏主意,那么可以考虑将command.exec.php命令与Windows runas命令结合使用。 或者,您可以以管理员身份运行您的Web服务器,这既容易做,又非常不安全

基本上你可以通过在Windows上安装一个SSH服务器来实现上面要做的事情( 什么是用于Windows的SSH服务器? ) – 之后你将不得不使用存在的用户登录服务器,并使用该用户的密码(或创建用户“root”并使用它)。 根据您的SSH服务器安装,运行命令C:\Program Files\CCleaner\CCleaner.exe可以按照上述方式工作。

  • 有没有Windows的“sudo”命令?
  • 如何以管理员身份运行PHP

在Linux中有更多关于如何去做的例子,不同的方法有不同的优缺点。

  • 通过PHP执行根命令
  • 如何以root身份运行PHP exec()?
 <?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);