Rsync 的端口转发

Rsync 的端口转发

我的服务器上除 222 端口外所有端口都被阻止,222 端口也是 ssh 连接的端口。此服务器基本上是备份服务器,我的客户端已 rsync 到它。

我使用 ssh 的端口转发 ( -P 222 -L 873:myserver.com:873) 来实现这一点,但是,我只想使用 rsync 命令来实现这一点。这可能吗?

这就是我一直在尝试的:

sudo rsync -avv --progress --inplace --rsh='ssh -p 222 -L 873:myserver.com:873' . rsync://bt-backup@localhost/backup-bt-backup

但它不起作用,因为我尝试登录到localhost,而不是myserver.com。

正在做:

sudo rsync -avv --progress --inplace --rsh='ssh -p 222 -L 873:myserver.com:873' . rsync://[email protected]/backup-bt-backup

让我通过 ssh 登录,但 rsync 尝试远程主机,而不是端口已转发的本地主机

答案1

如果服务器正在运行 SSHd,那么您可以直接rsync使用SSH

例如,我 经常运行类似的东西。无需将 rsync 作为守护进程运行或启用端口转发,因为 rsync 将使用 SSH 链接启动自身的副本,并通过 SSH 链接处理自身与该实例之间的所有同步(并且远程副本会在连接断开时关闭,因此您不会得到一堆僵尸进程)。
rsync -a --inplace some/dir/ [email protected]:/destination/dir/

要通过标准端口以外的端口进行通信,您只需要向 rsync 提供一些关于如何管理连接的额外信息,如下所示:
rsync -a --inplace -e 'ssh -p 222' some/dir/ [email protected]:/destination/dir/

这实际上更安全(所有 rsync 通信都受到 SSH 安全传输的保护,而使用端口转发所有内容都会以明文形式发送)并且更方便(不需要 rsyncd,您可以使用基于 SSH 密钥的身份验证)

答案2

使用脚本覆盖 ssh。创建一个ssh-connection.sh包含以下内容的脚本:

#! /bin/bash
ssh -p 222 -L 873:myserver.com:873 -l bt-backup myserver rsync --server --daemon .

不要忘记赋予它可执行权限:chmod u+rx ssh-connection.sh

此脚本故意忽略了参数。应将其用作:

sudo rsync -avv --progress --inplace --rsh='./ssh-connection.sh' . rsync://localhost/backup-bt-backup

祝你好运,
若昂·米格尔·内维斯

答案3

rsync -av --progress --inplace --rsh='ssh -p8023' somefile user@host:somedir/

来自参考http://www.linuxquestions.org/questions/linux-software-2/rsync-ssh-on-different-port-448112/

如果您想在远程主机上使用 rsyncd(使用 /etc/rsyncd.conf 配置),则仅需要端口转发。

如果需要连接到远程主机上的 rsyncd:

ssh -p 222 -L 873:localhost:873 login@host -f -N -q && \
rsync [opts] rsync://rsync_user@localhost:873/ ...

相关内容