【问题标题】:Allow the use of SUDO when connecting to ssh through Net_SSH2通过 Net_SSH2 连接到 ssh 时允许使用 SUDO
【发布时间】:2015-09-17 14:00:05
【问题描述】:

我在从 php 连接时通过 SSH 执行 Sudo 命令时遇到问题,但不是从常规终端连接

如果我通过 SSH 连接到带有 Net_SSH2 的 AWS 机器

            $ssh = new Net_SSH2($instanceIp);
            if ( ! $ssh->login('ec2-user', $key)) {
                $logger->error('Login Failed');
            }

我会收到这个错误:sudo: 抱歉,你必须有一个 tty 才能运行 sudo

如果我直接从终端连接 ssh -i ~/Path/to-file-key.pem ec2-user@111.111.11.111 所以我可以毫无问题地运行任何 sudo 命令。

我不想从 /etc/sudoers 中删除(我不想在服务器上做一些事情,我希望它通过连接来完成)

Defaults    requiretty

有没有办法做到这一点?

感谢您的帮助

【问题讨论】:

  • 您的标题询问如何禁用 PTY 分配,但您似乎在询问如何启用它。您能否编辑您的问题以澄清您在这里寻找什么样的答案?
  • 我已经更新了这个问题,希望它会更清楚,你将能够提供帮助:) 谢谢

标签: php ssh phpseclib


【解决方案1】:

如果我可以引用this的文章,

众所周知,Red Hat 系统(RHEL、Fedora...)在默认 sudoers 文件中需要 TTY。这并没有提供真正的安全优势,可以安全地删除。

Red Hat 已确认该问题并将在以后的版本中删除。

因此,删除“requiretty”是安全的,这样您通过 SSH 执行 sudo 命令就不会出现问题。

您也可以尝试使用 -t 选项运行 ssh(您可以在上述文章中找到其影响),它会强制进行伪 tty 分配,因此它可能会起作用。我不知道是否有办法将该选项添加到 Net_SSH,但它应该是基于 OpenSSH 的,所以通常你应该这样做。 最坏的情况,你总是可以通过 exec 运行 ssh 命令,但删除 require tty 似乎是最好的选择。

【讨论】:

    【解决方案2】:

    phpseclib 文档给出了如何使用 sudo 的示例:

    <?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("sudo ls -la\n");
    $output = $ssh->read('#[pP]assword[^:]*:|username@username:~\$#', NET_SSH2_READ_REGEX);
    echo $output;
    if (preg_match('#[pP]assword[^:]*:#', $output)) {
        $ssh->write("password\n");
        echo $ssh->read('username@username:~$');
    }
    

    http://phpseclib.sourceforge.net/ssh/examples.html#sudo

    如果您想尝试使用 $ssh-&gt;exec 进行操作(不清楚您在做什么,因为您没有在帖子中提供完整代码),您可以使用 sudo visudo 然后为您要运行的用户名/脚本。例如。

    username ALL=(ALL) NOPASSWD: /path/to/script
    

    或者,您可以这样做:

    echo "PASSWORD" | sudo -S /path/to/script
    

    有关更多信息,请谷歌“bash 脚本中的 sudo”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2015-03-14
      • 2011-11-03
      • 2018-09-10
      • 2015-12-15
      • 2017-06-01
      • 2014-10-08
      相关资源
      最近更新 更多