【问题标题】:ssh2_exec not executing simple commandssh2_exec 不执行简单命令
【发布时间】:2013-04-02 01:33:24
【问题描述】:

我对@9​​87654321@ 拒绝在 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。如果您有任何提示,请告诉我。谢谢。

【问题讨论】:

  • 添加这个结果是什么:if (! $connection) { die("Connection failed."); }

标签: php windows libssh2


【解决方案1】:

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

或者 如果您实际上是在 FROM 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 @987654323 结合使用@。或者您可以只以管理员身份运行您的网络服务器,这既非常容易做到,又对安全性非常不利

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

在Linux中如何做到这一点的例子更多,不同的方法有不同的优点和缺点。

【讨论】:

    【解决方案2】:
    <?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);
    

    【讨论】:

      猜你喜欢
      • 2019-02-15
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多