在 Web 浏览器上从 php 文件执行 rsync shell 命令

在 Web 浏览器上从 php 文件执行 rsync shell 命令

首先,我们要将更改从一个系统移动到另一个系统,为此,我们在synchfolders.sh文件中有一个 shell 脚本,如下所示

rsync -av --delete -e 'sshpass -p Wordpress@123 ssh -p 22' [email protected]:/var/www/html/prosync/wp-content/plugins/ /var/www/html/devsync/wp-content/plugins >> /var/www/html/devsync/wp-content/mysynclog.txt

我们希望通过以下方式在 PHP 文件中执行此 shell 脚本shell_exec():从浏览器执行此 PHP 文件时,除了 rsync 命令之外,其他命令均在执行,但未rsync执行。我们在 SO 中搜索了相关内容,并获得了链接https://stackoverflow.com/questions/30772816/php-exec-rsync-ssh-to-remote-server-not-working/30773063#30773063,正如这里所说,我们尝试从命令行执行 PHP 文件,并且运行正常,但通过浏览器则不行。为什么,请告诉我们我们在哪里犯了错误。提前致谢

答案1

一般来说:在那些不能从你通常的交互式 shell 中执行的脚本中,你需要确保使用绝对路径/usr/bin/rsync即代替rsync)或设置正确的环境为 $PATH 赋予良好的值


作为一项额外的改进:您应该真正设置基于密钥的 ssh 身份验证以供脚本使用,而不是基于密码的身份验证。

当您停止使用密码并开始使用密钥时,您可以锁定并保护 ssh 服务器(禁用密码验证将阻止暴力攻击),更重要的是,您可以对使用特定密钥进行验证时允许的内容添加限制,这是使用密码无法做到的。

您可以限制脚本中使用的密钥,以便它只能用于来自特定主机的 rsync。

那么,即使您的脚本被泄露,被盗的也不是您的根密码(授予您服务器的完全控制权),而只是一个授予有限访问权限的私钥(如果它可以使用的话)。

相关内容