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

Xer*_*xes 19 security ssh rsync copy tar

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

使用 OpenSSH v4.9+ sftp 有一些不错的选项,允许您对传入的连接进行 chroot 等 - 这是我会考虑的解决方案,但是我坚持使用 RHEL,并且 RHEL4 或 RHEL5 都不支持该版本SSH。

我目前的解决方案是使用客户端用户的密钥向服务器端添加这样的东西......

server% cat ~/.ssh/authorized_keys
command="cd /srv/rsync/etl && tar --exclude './lost+found' -pcf - ./" ssh-rsa...

......因此客户端将被限制为一件事,只有一件事......

客户端% ssh -T -i ${HOME}/.ssh/id_rsa oracle@database.com > sensative.tar

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

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

Dav*_*ney 18

Rsync 支持使用 ssh 作为传输

rsync -az /path/to/source username@host:/path/to/destination
Run Code Online (Sandbox Code Playgroud)

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

rsync -aze ssh /path/to/source host:/path/to/destination
Run Code Online (Sandbox Code Playgroud)

使用 rsync 的替代方法是BC Pierce 的 Unison,它具有与 rsync 类似的功能,但在两端保留本地索引以避免必须遍历文件系统来计算增量


Xer*_*xes 5

好吧,我终于想通了,但解决方案并不像我希望的那样优雅。

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

no-pty, command="exit"
Run Code Online (Sandbox Code Playgroud)

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

ssh -l username -fNTL 8073:server:873
Run Code Online (Sandbox Code Playgroud)

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

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

rsync --port=8073 -a user@localhost::mySecureStore /srv/some/place/
Run Code Online (Sandbox Code Playgroud)