使用rsync时是否可以指定其他ssh端口?


366

我一直在尝试以下命令:

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

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

我想知道是否可以在非标准ssh端口上将rsync同步到远程主机。

Answers:


136

另一个选项,在运行rsync的主机中,在ssh配置文件中设置端口,即:

cat ~/.ssh/config
Host host
    Port 2222

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

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

21
尽管这不是最明显的答案,但仍然是一个很好的答案。对于您多次连接到一两次以上的主机,使用SSH配置是值得的,因为它将节省大量的思考和输入时间。
约翰·亨特

5
确实,尽管公平地说,缺点是它变得不可见,即,过一会儿,您可能会忘记它在ssh配置文件中,并且不了解它的工作方式,或者您的一位同事可能会复制/粘贴该命令,而不了解为什么在他们的帐户中无效。不过,就我个人而言,我更喜欢不必一直输入端口号。
Joao Costa

1
这太可怕了。它与端口NAT完全不兼容。除非您想为同一个IP地址使用多个DNS名称,否则这是一个维护问题
meffect 2015年

1
@melfect你在开玩笑吗?对于需要rsync多次访问怪异端口的人来说,我不会称它为有史以来最可怕的事情,但是每次都散布到足以忘记语法的地方。
Freedom_Ben

1
虽然这使您更易于连接,但也使黑客更容易,并且您的auth.log将再次被自动尝试所淹没。因此,它改变了端口更改的意义。
书信

625

您的命令行应如下所示:

rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path

这可以正常工作-我一直在使用它,而无需任何新的防火墙规则-请注意SSH命令本身用引号引起来。


8
我不知道为什么会这样-这是如此明显的需求,但仍然很隐蔽,因为这实际上为ssh二进制文件创建了别名。(尽管它运行
得很

1
带有冒号的作品user@host:/path
DmitrySandalov

23
该命令的关键部分是-e'ssh -p 2222',因此您可以将其与不同的rsync参数一起使用
Evan Donovan 2014年

2
请注意,如果您需要指定ssh键,则可以执行-e'ssh -i mykey -p
2222'– dranxo

9
为什么-删除已发送的文件?如果对源数据有危险,最好提一下……
Tiw

14

当您需要通过特定的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

3
究竟是什么增加了现有答案?
克里斯·梅斯

看一下格式和示例。我在这里简化了事情。
Techie

4
好的,您删除了两个可选选项,但从本质上讲,您的答案与接受的答案完全相同...
克里斯·梅斯

2
它更加简化和格式化。对于新学习者来说更容易理解。顺便说一句,谢谢你无缘无故的弃权
Techie 2015年


2

有点题外话,但可能会帮助某人。如果您需要传递密码和端口,我建议使用sshpass软件包。命令行命令如下所示: sshpass -p "password" rsync -avzh -e 'ssh -p PORT312' root@192.xx.xxx.xxx:/dir_on_host/


这是行不通的,因为与键盘交互会弄乱数据流,从而破坏协议。
Evi1M4chine

2

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

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

3
究竟是什么增加了现有答案?
克里斯·梅斯

不错的一个完美的作品。谢谢:)
Sammu Sundar

2

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

rsync -rvz --progress-删除发送的文件-e“ ssh -p 2222” ./dir user @ host / path

Rsync在不安全的TCP端口873上作为守护程序运行。

从Rsync的人:

推送:rsync [OPTION ...] SRC ... [USER @] HOST:DEST

这会误导人们尝试:

rsync -rvz --progress-删除发送的文件./dir user @ host:2222 / path

但是,这指示它连接到端口2222上的Rsync守护程序,该端口不存在。


其他答案未提及端口873
凯文夫

问题是如何使它作为ssh在2222端口上运行;rsync是否要求它是另外一个故事。
Dan Steingart

@DanSteingart我更新了答案,现在有帮助吗?
kevinf

-3

我无法通过另一个端口上的ssh获得rsync的连接,但是我能够通过iptables将ssh连接重定向至所需的计算机。这不是我一直在寻找的解决方案,但是它解决了我的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.