【问题标题】:PHP scp file from remote server来自远程服务器的 PHP scp 文件
【发布时间】:2019-01-31 17:40:07
【问题描述】:

如何从 PHP 脚本 scp 远程服务器上的文件?

我尝试了shell_exec("scp remote:file dir"),但这不起作用,因为用户apaache 在远程服务器上没有关联的shell,因此不能执行ssh。

我尝试创建一个Copy.sh setuid 脚本,该脚本创建为user1 并使用shell_exec("Copy.sh file dir")。然而,当 Copy.sh 执行时,Apache 服务器(或 PHP?)并没有改变 uid,尽管有 setuid 标志。

这篇文章 https://serverfault.com/questions/7589/how-do-you-run-a-php-script-as-the-files-owner-rather-than-as-the-webserver-us 安装suPHP 的建议,我似乎没有安装。这是要走的路吗?我已经安装了mod_suexec,但是这个模块似乎只能更改 PHP 脚本本身的 uid。它可以(ab)用来做我想做的事吗?

也许有一种方法可以将user1 的 ssh 密钥提供给 PHP 脚本,以便它可以进行复制?

【问题讨论】:

  • 你可以指定远程用户进行连接,如果没有指定它使用你当前的用户:scp someusername@remote:file dir
  • 试过了,但没有进一步调试,因为我认为用户 apache 不能只使用用户 someusername 的密钥。
  • 是的,但是您可以将 Apache 用户的 PubKey 添加到远程 someusername 的 authorized_keys 文件中。
  • 啊,我太笨了。在您的帮助下,它开始工作了。但是由于我不明白的原因,我不能做scp user1@remote:file dir,但不得不做ssh user1@remote scp file local:dir
  • 解释比较简单。对于ssh 命令,我还使用了-o StrictHostKeyChecking=no 选项来让它工作。将此添加到scp 也可以。

标签: php scp setuid suphp


【解决方案1】:

您可以在scp 中指定应该使用哪个远程用户进行连接:

scp someusername@remote:file dir

如果您想以 Apache 用户身份运行它,您需要将 Apache 的 PubKey 添加到远程 someusername 的 authorized_keys 文件中。


如果 Apache 用户之前从未通过 SSH 连接到远程,它可能不信任 HostKey。您应该将其添加到用户的known_hosts 文件中,例如通过交互(在 shell 中)以 Apache 用户身份连接到远程并在询问时键入 yes。或者使用StrictHostKeyChecking=no 禁用检查,但这会带来安全隐患。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 2011-12-11
    • 1970-01-01
    • 2014-11-18
    • 2017-11-04
    • 2020-02-25
    • 2014-07-10
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多