繁体   English   中英

用php exec更改rsync端口

[英]Change rsync port with php exec

使用PHP,我试图连接到远程服务器并执行rsync命令:

$rsync_cmd = 'rsync -P -azv -e "ssh -p 1234" /dir/file.jpg root@remoteserver2:/dir/file.jpg';

exec('sudo ssh -tt root@remoteserver1 '.$rsync_cmd.' 2>&1', $output);

远程连接工作正常,但是当我包含rsync命令时,出现端口错误“ ssh:连接到主机remoteserver2端口22:连接被拒绝”

要使用的正确端口是1234,并且此命令在终端机(外壳)上工作正常,但是php“ exec”功能不想使用它(“ ssh -p 1234”),有什么主意吗?

您是否在终端中通过ssh到remoteserver1,然后执行rsync命令,或通过在一行上执行整个ssh -to- rsync命令来对其进行测试? 因为我很确定分两个步骤进行都可以,但是只有一个步骤行不通。 这是因为,当它一步完成时,命令字符串在通过ssh传递到远程外壳程序之前将被本地外壳程序解析(包括执行引号和转义解释以及删除),然后再通过另一行引用和转义解释,去除)。 本地外壳程序将解析和删除"ssh -p 1234"那些双引号,因此它们没有被远程外壳程序解析和应用的预期效果。

如果我对这个问题是正确的,则解决方案非常简单:转义双引号。 这样,本地外壳程序将解析并删除转义符,并将双引号不加干扰地传递,以便远程外壳程序可以看到并应用它们:

$rsync_cmd = 'rsync -P -azv -e \"ssh -p 1234\" /dir/file.jpg root@remoteserver2:/dir/file.jpg';

exec('sudo ssh -tt root@remoteserver1 '.$rsync_cmd.' 2>&1', $output);

解决方案非常简单,请尝试从命令中跳过-P标志。

$rsync_cmd = 'rsync -azv -e \"ssh -p 1234\" /dir/file.jpg root@remoteserver2:/dir/file.jpg';

exec('sudo ssh -tt root@remoteserver1 '.$rsync_cmd.' 2>&1', $output);

它将-P标志与rsync的默认端口一起使用会很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM