如何在具有显式端口和不同用户名的两个遥控器之间 rsync 文件?

如何在具有显式端口和不同用户名的两个遥控器之间 rsync 文件?

我想在两个远程服务器之间同步文件。我尝试遵循@roaima的下一个解决方案:https://unix.stackexchange.com/a/183516/137526,但我需要一个更微妙的解决方案,原因有二:

  1. 其中一台远程服务器具有 ssh 的非默认端口,因此我需要使用 -p 选项指定端口。
  2. 我可以通过 ssh 连接到两台服务器,但我必须使用不同的用户名,因此必须明确指定。

此外,在引用的解决方案中,不清楚源主机上的路径以及目标主机上的路径,因为两者都显示为 /var/www

我尝试了下一个命令的不同变体,但没有成功:

ssh -R localhost:50000:username1@dest_host:22 username2@source_host 'rsync -e "ssh -p 50000" -avzt --progress --partial /path/on/source/ localhost:/path/on/destination/'

答案1

你在那里做的事情至少是“复杂的”。据我了解,您连接到一台服务器,并告诉它同步到另一台服务器。

为了便于使用,您可以指定在特定主机的本地 ssh 配置中使用的端口和用户。例如,如果将以下行添加到 source_host 上的文件 ~/.ssh/config (/home/username2/.ssh/config) 中:

machine dest_host
 user username1
 port 50000

您可以使用以下命令将文件从 source_host 同步到 dest_host:

ssh username2@source_host 'rsync -e ssh /source/path/on/source_host dest_host:path_below_username1_home

假设,dest_host 的 sshd 侦听端口 50000。您可能还想查看 rsync 的“-r”/“-u”选项。

答案2

我发现的优雅的解决方案是使用scp.

scp -3 -Cp [email protected]:/path/file*.txt [email protected]:/path/

它工作完美。请注意,两个主机使用两个不同的用户名。您还可以在文件名中使用通配符,例如*.

相关内容