【问题标题】:phptelnet vs phpseclibphptelnet 与 phpseclib
【发布时间】:2010-08-25 15:20:47
【问题描述】:

我正在尝试从 php 连接 unix 服务器并执行 .exe(C 语言)。早些时候我为此使用了 phptelnet,但现在由于安全问题我需要转向 phpseclib。当我使用 phptelnet 时,我有 100% 的成功率。我可以运行一些外部程序,例如带有参数的“C”程序作为 php 脚本中的输入。在 phptelnet 我使用

$telnet->DoCommand('cd public_html');
$telnet->DoCommand('cd abc');
$telnet->DoCommand('demo.exe');
$telnet->DoCommand("$inputs", $result);
echo $result;

这很完美。但现在我正在使用 phpseclib。我可以通过 ssh 连接到 unix 服务器并执行输入在程序中硬编码的程序。我正在使用

echo $ssh->exec('./demo.exe');

现在的问题是如何为程序提供输入。如何使用 exec() 接受参数作为输入。例如,demo.exe 是一个将两个数字相加的程序。那我可以说

 echo $ssh->exec("./demo.exe, '10 20'");

此外,我如何使用 exec() 在单次执行中执行多行代码。我有点困惑。非常感谢您对此的任何意见。

提前致谢。

【问题讨论】:

  • 您是否尝试过简单地将参数添加到第一个参数,即 echo $ssh->exec("./demo.exe 10 20"); ?
  • 嗨 Seidr,感谢您的评论。是的。我确实添加了您提到的论点。当我尝试这种方式时,脚本变得没有响应。

标签: php phpseclib


【解决方案1】:

您可以使用多种命令选择:

 $ssh->exec("./demo.exe '10' '20'");

省略逗号,将每个参数括起来。或使用$opts = implode(" ", array_map("escapeshellarg", $opts)) 转换列表。

如果您使用的是 SSH1 连接,则一次只能执行一个命令。如果您要连接到 Windows 服务器(看起来像这样),那么您不能在一行中有两个命令。

仅适用于您可以使用的 BSD/Linux 服务器:

 $ssh->exec("cmd1 ; cmd2");

【讨论】:

  • 感谢马里奥的建议。当我使用 $ssh->exec("./demo.exe '10' '20'"); 时,我的脚本没有响应我将尝试使用 implode() 并让您知道。顺便说一句,我可以按照您的建议运行多个命令 $ssh->exec("./demo.exe ; ./hello.exe");。我必须寻找接受参数的选项。谢谢回复。。
  • Implode() 将无济于事。如果这是一个 Win 服务器 (??),那么单引号可能根本不起作用。如果是这样,请尝试双引号或跳过转义。
  • 嘿马里奥。我尝试使用双引号和转义,也不起作用.. 感谢您的 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2020-10-22
相关资源
最近更新 更多