【问题标题】:Command works in SSH via MobaXterm, but not found in SSH via PHP?命令通过 MobaXterm 在 SSH 中工作,但在通过 PHP 的 SSH 中找不到?
【发布时间】:2015-08-07 22:50:02
【问题描述】:

我正在尝试通过 SSH(使用 Net_SSH2 类)在我的 PHP 代码中连接到服务器,并在远程服务器上运行一些命令。

远程服务器输出bash: runmqsc: command not found

奇怪的是,当我使用 MobaXterm SSH 到该服务器时,在该服务器上找到并运行完全相同的命令。

我确认代码使用正确的主机名、用户和密码进行连接。

有什么想法吗?

这就是我在 PHP 中所做的:

$this->ssh = new Net_SSH2("myhost");
$this->ssh->login("myuser", "mypass");

$command = "runmqsc MyQmgr \n DEFINE QLOCAL(MY_QUEUE) \n end \n";
$this->ssh->exec($command);

【问题讨论】:

  • myuser shell 启动脚本是否设置了PATH 等以使其工作?因为Net_SSH2 可能没有启动加载这些的交互式会话。
  • @EtanReisner 如果是这样,那为什么要通过 MobaXterm 工作?
  • 因为正在开始一个交互式会话。
  • 您的意思是 Moba 在某处读取文件并相应地设置 PATH 吗?如果是,该文件在哪里?
  • 没有。 MobaXterm 运行交互式 shell 会话。然后,您的 shell 会读取适合交互式会话的启动脚本。这些脚本可能设置了$PATHNet_SSH2 可能没有开始一个交互式会话,因此这些会话不会被加载。看看.bashrc.bash_profile

标签: php linux bash ssh phpseclib


【解决方案1】:

你可能需要做更多这样的事情:

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->read('username@username:~$');
$ssh->write("runmqsc MyQmgr\n"); // note the "\n"
echo $ssh->read('username@username:~$'); // or whatever the prompt is - does runmqsc have it's own prompt?
$ssh->write("DEFINE QLOCAL(MY_QUEUE)\n");
?>

...等等...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多