PHPSecLib:在远程服务器上执行scp到另一台远程服务器会提前终止吗?

时间:2015-09-07 06:52:37

标签: php ssh copy scp phpseclib

我尝试使用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()重新编写上述内容,但是由于对这些过程的工作原理有限,我没有成功。

有人能为我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

自己回答了这个问题。 事实证明,如果在默认值内没有收到STDOUT,Net_SSH2将自动超时执行。 答案是在exec声明之前调用$ssh->setTimeout(60000)(或其他一些同样荒谬的数字)。

答案 1 :(得分:0)

您使用的是公钥验证吗?如果您使用密码验证,那么您需要一个交互式提示。或者您也可以使用sourcefile属性。

我刚刚尝试使用公钥auth,它运行得很好。

相关问题