在服务器之间复制文件(不使用SCP)。
有两台Linux服务器。一台服务器正在运行电子学习系统(服务器1)。第二台服务器是我们安装了Drupal的Web服务器(服务器2)。
现在我们必须将文件(复制)从服务器1传输到服务器2.我以为Drupal用户可以发起将文件从第一台服务器传输到第二台服务器的请求。 (但是如果在server2的目录中添加新文件时自动复制文件会更好(但对我来说这似乎是不可能的))。
第一个要求是它应该非常安全地发生,许多人将使用它,他们没有关于服务器2上发生的事情的业务。
第二个要求是用户不必登录Linux服务器来启动复制过程。
欢迎任何建议和/或示例!
亲切的问候
答案 0 :(得分:2)
答案 1 :(得分:1)
scp
使用下面的ssh连接。除非:
您决定放弃私钥 - 即使在这种情况下,您也可以生成新的一对并撤销旧密钥
或者您已将默认配置更改为令人讨厌的内容。但对大多数用例来说真的很安全。
正如其他用户所说,您可以创建一个cronjob
来不时运行rsync
,以复制您的文件。 rsync
也可以在ssh上运行。此外,您还可以选择控制在第二台计算机上覆盖,更新,创建或删除的内容。
运行man rsync
了解详情。示例部分将为您提供帮助。
答案 2 :(得分:0)
我认为对scp的反对意见是需要在没有密码短语的情况下保存私钥,因此副本可以自动运行。
这是安全成本。
如果您想要自动执行背景,您有两种选择:
第三种选择是使用第三个锁定系统,该系统不托管其他用户并进行远程scp-to-scp传输。这样,密码只存在于第三个系统上,可能更容易保护。
答案 3 :(得分:0)
这是一种没有SCP的方法。
IMO是一种更简单/更安全和及时的方法 - 假设您可以访问目标服务器并且可以在其各自的Web服务器下添加一些代码 - 就是在“客户端”上使用一些curl php代码(服务器2 - drupal)和“服务器”(服务器1 - 电子学习)上的一些PHP代码来接收文件并适当地存储它。
您应该查看有关通过POST上传文件的PHP文档: http://www.php.net/manual/en/features.file-upload.post-method.php
另请查看curl_setopt(),尤其是“示例#2上传文件”: http://www.php.net/manual/en/function.curl-setopt.php
因此,每当您选择的某个事件发生在drupal-server2上时,您运行将文件上传到php脚本的代码 - 如下所示:
$remote_url = "http://elearning.server1.com/upload.php";
$data = array('file' => '@'. $uploadfile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$ce = curl_exec($ch);
curl_close($ch);
上面的困难部分可能是捕获Drupal中的上传事件并访问上传文件信息。或者你可以打开并阅读文件 - 我不在这里讨论。
在elearning-server1上,您的接收代码,例如http://elearning.server1.com/upload.php应如下所示:
$uploaddir = '/var/www/elearning/drupal_file_uploads/';
$basename = basename($_FILES['file']['name']);
$uploadfile = $uploaddir . $basename;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
一旦文件传输完成,您可以将原始文件保留在drupal服务器上或将其删除(或者在删除之前执行完整性检查,例如md5哈希比较)。
您可以通过apache设置进一步保护elearning-server1上的代码(仅允许从drupal服务器的IP地址访问此脚本),使用HTTPS / SSL,并使用您选择的密码从一个脚本到另一个脚本。
我不确定这对您的IT部门是否足够安全 - 但它尊重您IT部门的要求 - 他们会看到您尊重他们的回应,您甚至可能获得一些善意并增加对回报的信任。
在任何人在php脚本中使用ssh / scp之前 - 你应该问自己是否有更简单的方法来做你需要做的事情?你用火箭筒杀死蚊子吗?
设置SSH / SCP访问权限,即使使用密钥身份验证仍会产生许多漏洞,上面的其他人已经提到过这些漏洞。此外,该连接现在有可能根据其在该目标服务器上的权限执行任何破坏。如果你不需要,为什么要承担风险?
Rsync cron作业是安全的,但它会在运行之前引入延迟 - 这可能是您可能接受的,也可能是不可接受的。