如何在远程机器上运行 php exec 进行嵌套脚本?

如何在远程机器上运行 php exec 进行嵌套脚本?

我最初在 stackEx 中问过这个问题,后来发现它更适合这里。

我正在尝试从 Web 服务器自动部署主机集群上的服务。我之前曾调用 php exec 函数来运行简单的脚本,这不是问题;但是,我当前任务的复杂性似乎需要进一步配置。

我已经在主机和 Web 服务器之间交换了 ssh 密钥。这是作为按钮绑定到 php exec 的脚本:

  # store free memory text as variable


a="/root/pl3bs/a.txt"
b="/root/pl3bs/b.txt"
c="/root/pl3bs/c.txt"

amem=$(cat "$a")
bmem=$(cat "$b")
cmem=$(cat "$c")

# run script on host which has most free memory

if   [ "$cmem" -gt "$amem" ] && [ "$cmem" -gt "$bmem" ]

  then
        ssh 'pl3bs@<ip_redacted>' 'bash -s' < /home/deploy.sh

elif [ "$amem" -gt "$bmem" ] && [ "$amem" -gt "$cmem" ]

  then
        ssh 'pl3bs@<ip2_redacted>' 'bash -s' < /home/deploy.sh

else [ "$bmem" -gt "$amem" ] && [ "$bmem" -gt "$cmem" ]

        ssh 'pl3bs@<ip3_redacted>' 'bash -s' < /home/deploy.sh


fi

所以我知道这是从 www-data 用户运行的,并且我知道使用此用户运行脚本时存在权限问题和安全风险。我正在尝试正确执行此操作。我将 /root/.ssh 目录复制到我创建的 /var/www/.ssh 目录,将其 chown 为 www-data,为文件夹设置 700 个权限,为 authorized_keys 文件设置 600 个权限。它仍然没有从 php 按钮运行我的脚本。

如果我在 shell 中使用以下命令运行它:

sudo -u www-data ./instance.sh

它要求输入密码。在将 /root/.ssh 中的密钥复制到 /var/www/.ssh 之前,我将密钥从主机交换到 Web 服务器,反之亦然,那么为什么还会发生这种情况?我知道 www-data 用户因某种原因受到特别限制,所以我想这必须做些其他事情?如何让这个脚本运行,而不会造成安全漏洞?

我已经为此烦恼了将近 24 小时,需要一个解决方案。请帮帮我,即使你让我从头开始,用另一种方式。

谢谢。

答案1

我的理论解决方案是成功的。我有一个文件夹,用于存储用户输入的文本文件。我在服务器上的其他地方有一个用于存放脚本的文件夹,只有 root 可以访问该文件夹,并且每分钟通过 cronjob 运行一次。它会检查第一个目录中是否存在文本文件。如果存在,它会运行另一个脚本来部署实例,然后删除目录中的所有文本文件,否则结束。

我进行了简单的测试,这是一个可行的解决方法。现在我只需应用学到的知识并加以扩展,直到项目完成。

相关内容