我的服务器上除 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/ ...