0

我有 php 脚本,我在其中使用 expect 来在远程机器上自动登录和执行命令。这是我的 php 代码的样子,

<?php
    ini_set("expect.loguser", "Off");
    $stream = fopen("expect://ssh root@10.3.2.0", "r");
    $cases = array (
        array (0 => "*(yes/no)?", 1 => YESNO),
        array (0 => "*d: ", 1 => PASSWORD),
        array (0 => "*$ ", 1 => SHELL, EXP_EXACT)
    );
    switch (expect_expectl ($stream, $cases)) {
        case YESNO:
            fwrite ($stream, "yes\n");
            break;

        case PASSWORD:
            fwrite ($stream, "myrootpassword\n");
            break;

        case SHELL:
            fwrite ($stream, "top -n 1\n");
            break;

        default:
            die ("Error was occurred while connecting to the remote host!\n");
    }
    while ($line = fgets($stream)) {
        print $line;
    }         
    fclose ($stream);
?>

而且我知道我也为php安装了expect模块。

在此处输入图像描述

我也在我的 Ubuntu 机器上安装了 expect。

在此处输入图像描述

但我不知道为什么这是脚本不起作用。我按照http://www.php.net/manual/en/book.expect.phphttp://php.net/manual/en/expect.examples-usage.php创建了我的 php 脚本文件。请建议我,因为我是 PHP 的初学者,我需要做哪些修改才能在 php 中工作。

谢谢。

4

1 回答 1

0

首先,大多数服务器默认配置为不允许通过 ssh 远程登录。

其次,为什么不使用 SSH 密钥文件来允许无密码登录呢?它比存储密码更安全。

  1. 设置一个对自动化命令具有无密码 sudo 访问权限的帐户(对于本示例,我们将其称为“自动化”)(请参阅 NOPASSWD 上的标志sudoers
  2. 使用ssh-keygen配置从远程系统对该帐户的无密码访问
  3. 而不是使用expect://运行命令,只需直接运行命令:

    ssh automate@10.1.2.3 sudo theCommand

于 2013-07-27T05:20:21.537 回答