我想在两个远程服务器之间同步文件。我尝试遵循@roaima的下一个解决方案:https://unix.stackexchange.com/a/183516/137526,但我需要一个更微妙的解决方案,原因有二:
- 其中一台远程服务器具有 ssh 的非默认端口,因此我需要使用 -p 选项指定端口。
- 我可以通过 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/
它工作完美。请注意,两个主机使用两个不同的用户名。您还可以在文件名中使用通配符,例如*
.