您的命令行应如下所示:
rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path
这很好用——我一直使用它,不需要任何新的防火墙规则——只需注意 SSH 命令本身用引号引起来。
另一种选择,在您运行 rsync 的主机中,在 ssh 配置文件中设置端口,即:
cat ~/.ssh/config
Host host
Port 2222
然后 rsync over ssh 将与端口 2222 通信:
rsync -rvz --progress --remove-sent-files ./dir user@host:/path
rsync
到一个奇怪的端口但每次都散布到您忘记语法的地方的人来说,我不会称之为可怕的事情。
当您需要通过特定的 SSH 端口发送文件时:
rsync -azP -e "ssh -p PORT_NUMBER" source destination
例子
rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination
使用“rsh 选项”。例如:
rsync -avz --rsh='ssh -p3382' root@remote_server_name:/opt/backups
参考:http://www.linuxquestions.org/questions/linux-software-2/rsync-ssh-on-different-port-448112/
正确的语法是告诉 Rsync 使用自定义 SSH 命令(添加 -p 2222),该命令使用 SSH 创建到远程端的安全隧道,然后通过 localhost:873 连接
rsync -rvz --progress --remove-sent-files -e "ssh -p 2222" ./dir user@host/path
Rsync 在 TCP 端口 873 上作为守护进程运行,这是不安全的。
来自 Rsync 人:
推送:rsync [OPTION...] SRC... [USER@]HOST:DEST
这会误导人们尝试这样做:
rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path
但是,这指示它连接到端口 2222 上的 Rsync 守护程序,而该端口不存在。
我在 Mike Hike Hostetler's 网站上找到了这个非常适合我的解决方案。
# rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/
在java(可能还有其他语言)中调用rsync时,我发现设置
-e ssh -p 22
导致 rsync 抱怨它无法执行二进制文件:
ssh -p 22
因为该路径 ssh -p 22
不存在(-p 和 22 由于某种原因不再是参数,现在构成了二进制 rsync 应该调用的路径的一部分)。
为了解决这个问题,我可以使用这个环境变量:
export "RSYNC_RSH=ssh -p 2222"
(使用 env.put("RSYNC_RSH", "ssh -p " + port);
在 java 中以编程方式设置)
有点离题,但可能会帮助某人。如果您需要传递密码和端口,我建议使用 sshpass
包。命令行命令如下所示:sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/
我的 2cents,在单个系统用户中,您也可以在 /etc/ssh/ssh_config 上设置端口,然后 rsync 将使用此处设置的端口
我无法让 rsync 通过 ssh 在不同的端口进行连接,但我能够通过 iptables 将 ssh 连接重定向到我想要的计算机。这不是我正在寻找的解决方案,但它解决了我的问题。
user@host:/path