我有两台 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 的监狱目录中,并且他可以读取它们。