【问题标题】:How to let apache to do ssh如何让apache做ssh
【发布时间】:2012-05-18 13:20:07
【问题描述】:

我想使用 exec 从我的 php 中的远程服务器运行一些命令。像这样:

<? php
exec('ssh user@remote_server command');
?>

我的帐户可以使用公钥/私钥访问远程服务器的 ssh,但不能使用 apache。请注意,我没有对这两台机器的 root 访问权限。 Generating SSH keys for 'apache' user 的所有答案都需要 root 访问权限。

【问题讨论】:

    标签: php ssh


    【解决方案1】:

    我的建议:使用phpseclib, a pure PHP SSH implementation。例如。

    <?php
    include('Net/SSH2.php');
    
    $ssh = new Net_SSH2('www.domain.tld');
    if (!$ssh->login('username', 'password')) {
        exit('Login Failed');
    }
    
    echo $ssh->exec('pwd');
    echo $ssh->exec('ls -la');
    ?>
    

    【讨论】:

      【解决方案2】:

      Web 服务器进程由 apache 用户而非 root 拥有。

      1. 确保 apache 用户无需密码即可登录远程服务器

      2. SE linux 应该被禁用。 Refer

      【讨论】:

        【解决方案3】:

        我会尝试:

        $identity_file = '/home/you/.ssh/id_rsa'; // <-- replace with actual priv key
        exec('ssh -i ' . $identity_file . ' user@remote_server command');
        

        看看你是否可以像这样进行身份验证。您必须确保 Apache 可以读取身份文件。

        缺点是现在 Apache 用户可以读取您的私钥,这意味着任何其他以 Apache 用户身份运行的站点也可以。但即使您为 Apache 用户创建了私钥,也是如此。为了获得更好的安全性,请参阅关于使用 suPHP 或 suExec 以特定用户身份运行 PHP。

        【讨论】:

        • 不起作用。我需要使身份文件可由 apache 读取。这意味着由其他 (r+o) 读取。显然 ssh 不喜欢太开放的文件模式!
        【解决方案4】:

        如果没有 root 访问权限,这是一个坏主意。为了确保 Apache 的用户可以看到您的私钥,您必须使其对全世界都可读:没有 root 您不能chown www-data:www-data,因此不仅 Apache 能够看到它,系统上的每个用户都将能够。因为这是一个糟糕的主意,所以 OpenSSH 默认不允许它运行 - 如果您的私钥具有不合理的打开文件权限,它将拒绝运行。

        我强烈建议不要这样做。如果您确实需要能够让 PHP 使用 SSH 密钥运行远程命令,那么您将需要具有 root 访问权限的人按照您的链接设置更安全的东西。

        更安全的替代方法是在目标机器上编写一个 PHP 脚本,该脚本接受一个包含您定义的密码的 HTTP 请求,执行一个预定义的命令并返回输出。如果此脚本是安全编写的并且只能执行一个预定义的命令,那么攻击者所能做的就是运行与您相同的命令 - 只要此脚本的密码与您自己的任何密码不同。它不一定是一个命令,如果你小心的话,它甚至可以带一些参数:重要的是你不允许远程用户在目标机器上执行 任意 命令.如果您确定您希望能够运行的命令没有潜在的危害,并且您的脚本不包含允许运行其他命令的编码错误,那么这不是一个坏主意。

        【讨论】:

          【解决方案5】:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-05-02
            • 2021-08-12
            • 2011-07-18
            • 2012-09-07
            • 1970-01-01
            • 2013-11-10
            • 2018-07-30
            相关资源
            最近更新 更多