在远程服务器上的shell上自动登录以执行某些命令的问题

时间:2016-02-09 11:03:15

标签: php shell command remote-server

我想实现在远程服务器上具有特定用户的shell上自动登录并执行命令来安装Android应用程序。 我写了一些代码来通过PHP登录到远程服务器。我使用方法ssh2_connect连接到服务器,使用公钥进行身份验证并且可以正常运行。现在我想安装一个apk文件。我需要执行以下命令

  1. sudo user
  2. pm install -r /path/to/file/on/remote
  3. 用户没有密码。我PHP中的脚本看起来像

    $con = ssh2_connect("xxx.xxx.xx.xxx", "xy", array("hostkey" => "ssh-rsa"));
    if(ssh2_auth_pubkey_file($con, "user", $pubKey, $privKey, "password"))
    {
        $dataToSend = file_get_contents($srcFile);
        if($dataToSend === false) throw new Exception("Could not open local file: " . $srcFile);
        if(fwrite( $sftpStream, $dataToSend) === false) throw new Exception("Could not send data from file: " . $srcFile);
        $shell = ssh2_shell($con, "xterm");
        fwrite($shell, "commands to login and install app");
        fclose($shell);
        echo "passed through!";
    }
    

    我没有找到解决问题的解决方案。在我的本地电脑上,它适用于

    echo shell_exec("echo <password> | sudo -S <command>");
    

    我必须修改上面的行才能在远程服务器上运行?

    编辑:

    如果我编写任何命令并使用某些代码(例如

    )访问我的网站
    $stream = ssh2_exec($con, "cd /path/to/anywhere; mkdir ./test; chmod 444 ./test/");
    stream_set_blocking($stream, true);
    echo stream_get_contents($stream) . "<br />";
    

    它工作,创建了目录并设置了权限。但是,如果我尝试使用su whatever这样的东西,我仍然是同一个用户,而不是像示例那样。

    命令whoami始终返回相同的用户。为什么要使用每个命令而不是su xxx

    解决:

    远程服务器不支持命令sudo,但我没有得到任何errpr,也不知道他不知道命令。

    评论中提到的远程服务器上不存在sudoers或其他任何文件。

    ssh2_exec($con, "su system pm install -r " . $dstFile . "&");
    

    做我需要的一切。

0 个答案:

没有答案