나는 두 개의 리눅스 머신을 가지고 있는데 그들 사이에 ‘rsync’를 사용하여 파일을 동기화하려고하고있다.
클라이언트 컴퓨터에서 다음을 사용하여 키를 생성했습니다.
ssh-keygen -t rsa
그런 다음 공개 키를 /home/user1/.ssh/authorized_keys
과 /home/user2/.ssh/authorized_keys
파일.
다음 명령을 사용하여 user1에 파일을 rsync 할 수 있습니다.
rsync -a /home/user/sendIt.txt user1@some.host:/home/user1/
그러나 rsync를 사용하여 두 번째 사용자에게 파일을 동기화하려고 할 때 :
rsync -a /home/user/sendIt.txt user2@some.host:/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 사용자로만 사용하도록 고안되었으며 그는 자신의 홈 디렉토리로 수감되어 있습니다.
미래에 그것을 고치고 피하는 방법에 대한 생각?
도움이된다면 고맙겠습니다. 감사합니다.
답변
user2에 대한 액세스를 SFTP로만 제한했습니다. 그러므로 rsync
허용되지 않습니다.
이 문제를 해결하려면 SFTP에 대한 제한을 실행 취소해야합니다. sshd_config
.
대신 – 오직 허용 rsync
– 실행할 명령이 있는지 검사하는 스크립트를 작성할 수 있습니다. rsync
설정하다 ForceCommand
당신의이 스크립트에 sshd_config
.
또한보십시오 이 serverfault.com 질문 / 답변 .
답변
@sborsky가 이전에 언급했듯이, rsync
서버 구성이 SFTP로 제한되어 있기 때문입니다. 그러나 당신은 사용할 수 있어야합니다. sshfs
로컬로 원격 디렉토리를 마운트하고 rsync
그 마운트 된 디렉토리.
답변
문제 해결됨.
처음에 나는 ForceCommand
접근하지만 그것은 저를 위해 일하지 않았습니다.
내가 궁극적으로 할 일은 / user2에 바인딩 된 디렉토리 user2 안에 디렉토리를 만드는 것입니다. 이 디렉토리는 user1이 소유하고 있으며 파일을 rsync 할 수 있습니다.
프로세스는 다음과 같습니다.
user2는 다음을 사용하여 jailed / 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
파일이 해당 디렉토리에 동기화되면 자동으로 user2 jail 디렉토리에 나타나고 읽을 수 있습니다.