繁体   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