如何在不安全的网络上的服务器之间执行安全的rsync


19

基本上,我要问的是,有没有人遇到过将rsync包装在ssh中的方法。

使用OpenSSH v4.9 +,sftp有一些不错的选项,可让您chroot传入的连接,等等-这是我要考虑的解决方案,但是我坚持使用RHEL,并且RHEL4或RHEL5都不符合该版本ssh。

我当前的解决方案是使用客户端用户的密钥在服务器端添加类似的内容...

服务器%cat〜/ .ssh / authorized_keys
command =“ cd / srv / rsync / etl && tar-排除'./lost+found'-pcf-./” ssh-rsa ...

...因此客户只能被限制在一件事和一件事...

client%ssh -T -i $ {HOME} /。ssh / id_rsa oracle@database.com> sensative.tar

这样可以确保连接以及服务器(来自客户端)的安全,但是效率很低,因为将一遍又一遍地检索所有文件。

我正在使用rsync做类似(或更好)的事情之后。

Answers:


18

Rsync支持使用ssh作为传输

rsync -az /path/to/source username@host:/path/to/destination

一些较旧的rsync版本要求您明确指定ssh

rsync -aze ssh /path/to/source host:/path/to/destination

另一种使用rsync的方法是BC Pierce的Unison,它具有与rsync类似的功能,但是在两端都保留了本地索引,从而避免了遍历文件系统来计算增量的情况。


谢谢你的快速反应!我应该提到我也对此进行了调查-问题(就我而言)是它不会限制/限制用户。如果可以通过ssh与rsync服务进行通信(即使用定义远程的双冒号语法)-那将是完美的-但以上内容仅适用于单冒号-即通过ssh,因此没有chrooting。
Xerxes,2009年

我忘了提-Unison看起来不错,并且我会保留一个链接-但是,在这种情况下-我无法安装RHN提供的功能之外的任何东西-这很la脚,但超出了我的控制范围。
Xerxes,2009年

我还要提到的另一个限制是,连接需要从客户端-<i>拉动</ i>端而不是服务器端发起。(服务器端推送自然很容易保护服务器的安全,因为客户端没有发言权,但不适用于我当前的问题)。
Xerxes

1
rsync -az服务器:/路径/路径/在/客户端?
戴夫·切尼

1
为什么是chroot?您确实知道chroot并不能真正提高安全性。此外,如果您已经出去提供ssh,则通过ssh进行rsync不会降低系统的安全性。还要考虑一下,通过ssh进行rsync就是在服务器上调用rsync二进制文件。您可以像保护复制命令一样来保护它。
Paul de Vrieze,2009年

5

好的,我终于弄清楚了,但是解决方案并不像我希望的那样优雅。

在服务器端,您需要将以下内容添加到相关用户的authorized_keys文件中...

no-pty, command="exit"

然后,可以在客户端上按以下方式创建隧道...

ssh -l username -fNTL 8073:server:873

建立隧道后,您可以照常rsync-无法使用双冒号语法-到本地主机。

您选择的本地主机端口号(8073)显然是完全可选的,请记住,这是您必须rsync 到的端口号...

rsync --port=8073 -a user@localhost::mySecureStore /srv/some/place/

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.