我一直在尝试以下命令:

rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path

SSH在端口2222上运行,但是rsync仍然尝试使用端口22,然后抱怨找不到路径,因为它当然不存在。

我想知道是否有可能在非标准的ssh端口上rsync到远程主机。


当前回答

另一种选择,在你运行rsync的主机上,在ssh配置文件中设置端口,即:

cat ~/.ssh/config
Host host
    Port 2222

然后rsync将通过ssh与端口2222通信:

rsync -rvz --progress --remove-sent-files ./dir user@host:/path

其他回答

正确的语法是告诉Rsync使用自定义SSH命令(添加-p 2222),该命令使用SSH创建到远程端的安全隧道,然后通过localhost:873进行连接

Rsync -rvz——progress——remove-sent-files -e "ssh -p 2222" ./dir user@host/路径

Rsync作为守护进程运行在TCP端口873上,这是不安全的。

来自Rsync男子:

推:rsync [OPTION, p ..]] SRC ...(USER@)主持人:DEST

这误导了人们这样做:

Rsync -rvz——progress——remove-sent-files ./dir user@host:2222/path

但是,这将指示它连接到端口2222上的Rsync守护进程,而端口2222并不存在。

我在Mike Hike Hostetler的网站上找到了这个解决方案,它非常适合我。

# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

我的2美分,在一个系统用户中,你可以在/etc/ssh/ssh_config上设置端口,然后rsync将使用这里设置的端口

另一种选择,在你运行rsync的主机上,在ssh配置文件中设置端口,即:

cat ~/.ssh/config
Host host
    Port 2222

然后rsync将通过ssh与端口2222通信:

rsync -rvz --progress --remove-sent-files ./dir user@host:/path

运行Linux Ubuntu我使用以下命令

Rsync -rvz——rsh='ssh -p2222'——progress——remove-sent-files ./dir user@host:/path

这将把rsh环境变量作为端口2222上的ssh连接传递。这里的所有其他方法似乎都不适合我的linux风格,所以我想把我的方法提供给其他人。

您还可以通过使用-e命令行选项或设置RSYNC_RSH环境变量来指定您喜欢的任何远程shell。

Rsync文档: https://download.samba.org/pub/rsync/rsync.1