当前位置: 首页 > 知识库问答 >
问题:

使用php exec更改rsync端口

章建木
2023-03-14

使用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:连接到主机远程命令2端口22:连接拒绝"

正确使用的端口是1234,这个命令在终端(shell)上运行良好,但是php“exec”函数不想使用它(“ssh-p1234”),知道吗?

共有2个答案

丰俊艾
2023-03-14

解决方案非常简单,尝试从命令中跳过-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);

它可以很好地使用rsync默认端口的-P标志。

樊奇思
2023-03-14

您是否在终端中通过将sshing转换为Remote teserver1,然后执行rsync命令,或者在一行中执行整个ssh-to-rsync命令来测试它?因为我很确定分两步做会奏效,但一步不行。这是因为当它作为一个步骤完成时,命令字符串被本地shell解析(包括执行引用和转义解释和删除),然后将其传递给远程shell(然后执行另一次引用和转义解释传递)和移除)。"ssh-p 1234"中的那些双引号被本地shell解析并删除,因此它们不具有被远程shell解析和应用的预期效果。

如果我对这个问题的看法是正确的,那么解决办法很简单:避开双引号。这样,本地shell将解析并删除转义,并将双引号传递给unlested,以便远程shell可以看到并应用它们:

$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);
 类似资料:
  • 在oh-my-zsh文件中,我通过更改. zshrc文件中的行来添加nvm。 插件=(git nvm)//添加了nvm 现在我看到了nvm,并在终端上使用它 但是当我改变下面看到的版本。 然后我关闭终端,打开一个新的,检查版本,它仍然显示使用以前的版本!它没有保持变化。 新窗口

  • rsync(Remote Sync)。你有两个目录想保持同步,可以使用 rsync 。要同步的目录可以是本地之间的目录,也可以是本地与远程之间的目录。 rsync 选项 源 目标 选项 r(recursive),递归复制,复制同步的文件不保留文件的权限,创建与修改时间。 a(archive),存档模式,可以递归复制,保留文件替身,复制同步的文件会保留文件的拥有者,用户名,时间,权限。 z(com

  • rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下: 1、可以镜像保存整个目录树和文件系统。 2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。 3、无须特殊权限即可安装。 4、优化的流程,文件传输效率高。 5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。 6、支持匿名传输。 Linux系统下如何使用rsync进行数据同步

  • 问题内容: 我有这个命令 并且我需要添加特定的非标准端口32001。该怎么做?我当时在想一些标志之类的东西,但我不知道其语法。 问题答案: 根据此MSDN链接,您将使用。

  • 问题内容: 我刚刚在Windows上安装了node.js。我有一个不运行的简单代码: 我得到:错误:听EADDRINUSE 是否有一个 配置文件 告诉node.js在特定端口上侦听? 问题是我已经让Apache监听了端口80。 编辑: 问题答案: 没有配置文件,除非您自己创建一个。但是,端口是函数的参数。例如,侦听端口8124: 如果查找打开的端口时遇到问题,可以转到命令行并输入: 查看每个适配器