【问题标题】:How to execute a bash script that use ssh with php如何执行使用 ssh 和 php 的 bash 脚本
【发布时间】:2017-09-14 00:35:36
【问题描述】:

我想用 php 执行我的脚本 bash。我的脚本将我登录到我的服务器然后创建我的帐户。

SCRIPT="useradd martinouh --home /home/martinouh --create-home; echo martinouh:$pass | chpasswd; usermod -s /bin/bash martinouh; usermod -aG sudo martinouh; usermod -aG docker martinouh;"

sshpass -p $pass ssh -o StrictHostKeyChecking=no root@$ip   "${SCRIPT}"

sshpass -p $pass ssh-copy-id -i /home/Martinouh/.ssh/id_rsa.pub martinouh@$ip

但是当我通过shell_exec(); 运行它时,它会执行脚本,但不会执行sshpass 的部分。

我应该怎么做才能执行它?

目前,只是为了测试shell_exec();。我正在通过调用包含以下内容的 localhost/script.php 来执行我的脚本

<?php
  $output = shell_exec('bash select.sh');
  echo $output;
?>

我在 error_log 中得到了这个:

 Failed to change pseudo terminal's permission: Permission denied
 Failed to change pseudo terminal's permission: Permission denied
 Failed to change pseudo terminal's permission: Permission denied
 Failed to change pseudo terminal's permission: Permission denied

也许这与 selinux 和 apache 权限有关?

【问题讨论】:

  • 手动执行 bash 脚本是否按预期工作?
  • 是的,当我手动运行它时,它确实按预期运行。
  • 您能否提供更多关于您如何使用 php 执行它的详细信息?
  • 目前我只是通过调用 localhost/script.php 来执行它。其中包含
  • 我认为是关于 apache 的用户/组尝试将其更改为您的用户/组,如果可行,基于 debian 的发行版/etc/apache2/envvars

标签: php html linux bash ssh


【解决方案1】:

由于错误消息涉及伪终端,请尝试使用 -T 禁用它。大多数需要伪终端功能的功能都是交互式的,无论如何都不适用于这种情况。

【讨论】:

    【解决方案2】:

    好的,现在我已经禁用了 SELinux,它确实会执行记录部分,然后添加一个用户......

    但它不会这样做

    sshpass -p $pass ssh-copy-id -i /home/Martinouh/.ssh/id_rsa.pub martinouh@$ip
    

    我的网页上有这个

    /usr/bin/ssh-copy-id: ERROR: failed to open ID file '/home/Martinouh/.ssh/id_rsa.pub': Permission denied
    

    所以我试图移动钥匙和chown -R apache:apache,我在我的网页上得到了这个:

    /usr/bin/ssh-copy-id: ERROR: failed to open ID file './id_rsa': No such file or directory (to install the contents of 'id_rsa.pub' anyway, look at the -f option)
    

    我尝试了 -f 但它并没有改变

    /usr/bin/ssh-copy-id: ERROR: failed to open ID file '/.pub': No such file or directory
    

    编辑:

    它现在正在禁用 SELinux 并更正 ssh-copy-id,我必须将 id_rsa.pub 和 id_rsa 复制到一个目录和 chown -R apache:apache 两者。需要私钥,否则我无法将 id_rsa.pub 复制到服务器(即使使用 -f 标志)。

    现在我应该如何纠正这个我们知道是什么使它起作用(即使它不是正确的方法?)

    • 授予 apache 访问 ~/.ssh/ 的权限? (对于 ssh-copy-id)

    • 赋予 apache 执行脚本/shell 的权利? (SELinux)

    【讨论】:

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