无法与特定用户在服务器之间进行 rsync

无法与特定用户在服务器之间进行 rsync

我有两台 Linux 机器,我正在尝试使用“rsync”在两台机器之间同步文件。

我已经使用以下命令在客户端计算机上生成了密钥:

ssh-keygen -t rsa

然后将公钥复制到/home/user1/.ssh/authorized_keys/home/user2/.ssh/authorized_keys文件中。

我能够使用以下命令将文件 rsync 到 user1:

rsync -a /home/user/sendIt.txt [email protected]:/home/user1/

但是,当我尝试使用 rsync 将文件同步到第二个用户时,使用以下命令:

rsync -a /home/user/sendIt.txt [email protected]:/home/user2/

我收到此错误:

protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(171) [sender=3.0.6]

为什么我可以同步到一个用户,但不能同步到另一个用户?我应该提到,第二个用户仅设计为 SFTP 用户,并且他被限制在他的主目录中。

有没有想过如何修复这个问题并避免将来再发生?任何帮助都将不胜感激,谢谢。

答案1

您限制用户 2 仅能访问 SFTP。因此这rsync是不允许的。

为了解决这个问题,您必须取消对 SFTP 的限制sshd_config

相反 - 仅允许rsync- 您可以编写一个脚本来检查要运行的命令是否为rsync,并ForceCommand在您的sshd_config.

也可以看看此 serverfault.com 问题/答案

答案2

正如 @sborsky 之前所说,您不能这样做,rsync因为您的服务器配置仅限于 SFTP。但是您应该能够sshfs在本地使用和挂载远程目录,并将其rsync挂载到该挂载目录中。

答案3

问题解决了。

起初我尝试过这种ForceCommand方法,但对我来说不起作用。我最终做的是在 user2 jailed/bind 目录中创建一个目录。此目录归 user1 所有,我可以将文件 rsync 到其中。

过程如下:user2 被监禁/chrooted 使用

Match Group sftponly
        ChrootDirectory /var/ftp
        ForceCommand internal-sftp
        AllowTcpForwarding no

里面/etc/ssh/sshd_config

该目录使用以下命令绑定到他的主目录:

mount --bind /var/ftp /home/user2/ftp

然后/var/ftp/我在里面做了:

mkdir tempDir
chown -R user1:user1 tempDir

一旦文件同步到该目录,它们就会自动出现在用户 2 的监狱目录中,并且他可以读取它们。

相关内容