使用rsync时是否可以指定不同的ssh端口?

Ket*_*ema 341 ssh rsync

我一直在尝试以下命令:

rsync -rvz --progress --remove-sent-files ./dir user@host:2222/path
Run Code Online (Sandbox Code Playgroud)

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

我想知道是否可以rsync到非标准ssh端口上的远程主机.

小智 591

您的命令行应如下所示:

rsync -rvz -e 'ssh -p 2222' --progress ./dir user@host:/path
Run Code Online (Sandbox Code Playgroud)

这工作正常 - 我一直使用它而不需要任何新的防火墙规则 - 只需注意SSH命令本身用引号括起来.

  • 该命令的关键部分是-e'ssh -p 2222',因此您可以将其与不同的rsync参数一起使用 (22认同)
  • 为什么--remove-sent-files?如果它对源数据有危险,请更好地提及它...... (9认同)
  • 我想知道为什么会这样 - 这是一个显而易见的需求,仍然非常隐蔽,因为这有效地创建了ssh二进制文件的别名.(虽然它完美无缺) (8认同)
  • 请注意,如果你需要指定一个ssh密钥,你可以像-e'ssh -i mykey -p 2222'那样做 (2认同)

Joa*_*sta 121

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

cat ~/.ssh/config
Host host
    Port 2222
Run Code Online (Sandbox Code Playgroud)

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

rsync -rvz --progress --remove-sent-files ./dir user@host:/path
Run Code Online (Sandbox Code Playgroud)

  • 虽然这不是最明显的答案,但它仍然是一个非常好的答案.对于您连接的任何主机,使用SSH配置值多于一次或两次是值得的,因为它可以为您节省大量的思考和打字. (21认同)
  • 事实上,虽然是公平的,不足之处是它变得不可见,即一段时间后,人们可能会忘记它是在ssh配置文件,不明白它是如何工作的,或你的同事可能会复制/粘贴命令之一,不明白为什么它在他们的帐户中不起作用.不过,我个人更喜欢不必一直输入端口号. (5认同)
  • @melfect 你在开玩笑吗?对于需要多次`rsync`到一个奇怪的端口但每次都被分散到你忘记语法的地方的人来说,我不会称之为可怕,因为我称之为有史以来最伟大的事情。 (2认同)

Tec*_*hie 15

当您需要通过特定SSH端口发送文件时:

rsync -azP -e "ssh -p PORT_NUMBER" source destination
Run Code Online (Sandbox Code Playgroud)

rsync -azP -e "ssh -p 2121" /path/to/files/source user@remoteip:/path/to/files/destination
Run Code Online (Sandbox Code Playgroud)

  • 好的,你删除了两个可选选项,但实质上你的答案与接受的答案完全一样...... (3认同)
  • 这究竟是什么增加了现有答案? (2认同)
  • 它更简化和格式化.更容易理解新学员.顺便感谢没有理由的投票 (2认同)

Siw*_*申思维 8

使用"rsh选项".例如:

rsync -avz --rsh='ssh -p3382' root@remote_server_name:/opt/backups
Run Code Online (Sandbox Code Playgroud)

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


kev*_*inf 8

正确的语法是告诉 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守护程序,该端口不存在。


小智 5

运行 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