【发布时间】:2015-12-02 15:47:24
【问题描述】:
我正在尝试使用 PHPSecLib 通过 PHP 在两个远程服务器之间复制文件。
在 domain.tld 和 domain2.tld 之间存在 SSH 密钥,并且从 domain.tld 本地执行此 SCP 工作正常。
我的代码的精简版:
echo "Copying file... ";
$ssh = new Net_SSH2('domain.tld');
$ssh->enableQuietMode();
$ssh->login('user','pass');
$ssh->exec("scp /home/file.tar.gz root@domain2.tld:/home/file.tar.gz");
if($ssh->getExitStatus())
exit("Failed at line: ".__LINE__);
echo "Done!\n";
在上面的示例中,脚本将在 5 秒后完成,并回显“完成!”最后,但是复制还没有完成,还要运行大约 2 分钟。
不幸的是,我希望远程处理以这种方式复制的文件,因此需要等待它完成。
我也使用 PHPSecLib Net_SCP 进行了调查,不幸的是,这无法执行远程 -> 远程复制,我需要避免使用本地服务器作为复制过程的中介(由于距离/带宽限制)。
我尝试使用 $ssh->read() 和 $ssh->write() 重写上述内容,但是由于对这些程序的工作原理了解有限,我没有成功。
有人能帮我解释一下这个问题吗?
【问题讨论】:
-
如果你手动ssh到第一台服务器,并执行scp命令,它是在后台还是前台运行scp?有点远射!
-
您可以尝试使用
callback功能吗? phpseclib.sourceforge.net/ssh/examples.html -
使用文档中指定的回调,没有回显。
-
另外,scp 在前台运行。它在目标服务器的 stderr 上显示一行,说明“stdin: is not a tty”,然后显示(假设)基于诅咒的进度条完成。
标签: php ssh copy scp phpseclib