SSH到服务器并从那里rsync–;非标准端口

SSH到服务器并从那里rsync–;非标准端口,ssh,rsync,Ssh,Rsync,我有两台具有非标准ssh端口的服务器: liveserver.com-p123 testserver.com-p456 为了将数据从liveserver同步到testserver,我想我应该用ssh连接到testserver,然后从那里将数据rsync到本地(也称为testserver) ssh user@testserver.com -p 456 rsync -zra -e "ssh -p 123 --delete --exclude='.env' user@liveserver.com:

我有两台具有非标准ssh端口的服务器:

  • liveserver.com-p123
  • testserver.com-p456
为了将数据从liveserver同步到testserver,我想我应该用ssh连接到testserver,然后从那里将数据rsync到本地(也称为testserver)

ssh user@testserver.com -p 456 rsync -zra -e "ssh -p 123 --delete --exclude='.env' user@liveserver.com:/path/to/dump.bz2 path/to;
这给了我

Unexpected remote arg: user@liveserver.com:/path/to/dump.bz2
rsync error: syntax or usage error (code 1) at main.c(1354) [sender=3.1.3]
我的概念是错误的还是仅仅是语法

ssh user@testserver.com -p 456 "rsync -zra -e 'ssh -p 123' --delete --exclude=.env user@liveserver.com:/path/to/dump.bz2 path/to"

未经测试

有效!谢谢总是使用这些双引号,还是只在没有双引号的情况下中断时才使用它们,这是一种良好的做法?@Urs在这种情况下需要这样做,因为在执行该命令之前会发生什么。本地shell解析它,应用并删除双引号。这被传递到
ssh
命令,该命令将其发送到远程计算机,在远程计算机上,shell再次解析它,然后再次应用并删除单引号,并将结果传递给该系统上的
rsync
。由于单引号适用于传递给
rsync
的内容,因此它们才是真正重要的;但是仍然需要双引号,这样本地shell就不会删除单引号。理解额外解析步骤的简便技巧:替换
sshuser@testserver.com-p 456
echo
,并查看打印内容。这就是本地shell解析并删除第一级引号(双引号)后的样子,这就是将发送到远程shell执行的内容。如果您可以让它成为在远程系统上执行的有效命令,那么当您将
ssh…
部分放回时,它应该可以工作。