Impossibile rsync tra server con un utente specifico


1

Ho due macchine Linux e sto provando a sincronizzare un file tra loro due usando 'rsync'.

Ho generato una chiave sulla macchina client usando:

ssh-keygen -t rsa

E poi copiato la chiave pubblica per /home/user1/.ssh/authorized_keys e /home/user2/.ssh/authorized_keys File.

Sono in grado di rsincronizzare un file con user1 usando il comando successivo:

rsync -a /home/user/sendIt.txt user1@some.host:/home/user1/

Tuttavia, quando sto cercando di usare rsync per sincronizzare un file con il secondo utente usando:

rsync -a /home/user/sendIt.txt user2@some.host:/home/user2/

Ho ricevuto questo errore:

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]

Perché sono in grado di eseguire la sincronizzazione con un utente ma non con l'altro? Dovrei menzionare che il secondo utente è progettato per essere utilizzato solo come utente SFTP e viene incarcerato nella sua home directory.

Qualche idea su come risolverlo ed evitarlo in futuro? Qualsiasi aiuto sarebbe apprezzato, grazie.


Controlla la versione rsync dell'utente2 in jail.
Ipor Sircer

1
Dai un'occhiata questa risposta su Server Fault : "È possibile incontrare problemi se il .bashrc sul server remoto emette qualsiasi cosa sul terminale. Rsync potrebbe non aspettarselo e potrebbe avere problemi di conseguenza. Puoi risolvere questo problema rimuovendo qualsiasi comando nel file .bashrc che emette il testo o eseguendo il piping di qualsiasi output /dev/null“.
JakeGould

@ IporSircer perché la versione in user2 dovrebbe essere diversa dalla versione in user1? Entrambi sono sulla stessa macchina. @Jake, dov'è questo? .bashrc il file si trova?
Dany Lavrov

@DanyLavrov The .bashrc il file si trova nella directory principale dell'utente. Quindi nel tuo caso lo sarebbe /home/user2/.bashrc o ~/.bashrc se effettui il login come utente.
JakeGould

@DanyLavrov: se l'utente2 non è stato arrestato rsync binario nella sua casa, quindi anche ssh non riesce a trovarlo ed eseguirlo.
Ipor Sircer

Risposte:


1

Hai limitato l'accesso solo per utente2 a SFTP. così rsync non è permesso.

Per risolvere questo, dovresti annullare la restrizione a SFTP in sshd_config.

Invece - per consentire solo rsync - potresti scrivere uno script che controlla se il comando da eseguire è rsync e impostare ForceCommand a questo script nel tuo sshd_config.

Guarda anche questa domanda / risposta serverfault.com .


Ok grazie. Ho limitato l'accesso dell'utente a SFTP solo perché è ciò di cui ho bisogno per lui. Quale sarebbe il modo migliore per me di inserire i file nella sua cartella home usando rsync ma continuando a tenerlo limitato? Sarò in grado di sincronizzare i file in una directory con proprietà utente1 e quindi utilizzare rsycn per copiarlo nella sua directory home (sulla stessa macchina)? O questo finirà per darmi lo stesso errore?
Dany Lavrov

Quindi, in pratica, se scriverò il comando rsync esatto che sto cercando di eseguire rsync -a /home/user/sendIt.txt user2@some.host:/home/user2/ accanto al ForceCommand permetterà la sua esecuzione?
Dany Lavrov

Avrà qualche effetto collaterale sul fatto che questo utente debba essere limitato a questa directory specifica? Questo utente sarà ancora in grado di connettersi e tirare file usando lo sftp?
Dany Lavrov

0

Come affermato in precedenza da @sborsky, non è possibile rsync perché la configurazione del server è limitata a SFTP. Dovresti comunque essere in grado di usarlo sshfs e montare la directory remota localmente e rsync a quella directory montata.


0

Problema risolto.

All'inizio ho provato il ForceCommand approccio ma non funzionava per me. Alla fine ho creato una directory all'interno della directory user2 jailed / bind to. Questa directory è di proprietà dell'utente1 e sono in grado di eseguire il rsync dei file.

Il processo è il seguente: utente2 è stato arrestato / chroot utilizzando

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

dentro /etc/ssh/sshd_config.

Questa directory era legata alla sua directory home usando:

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

Poi dentro /var/ftp/ L'ho fatto:

mkdir tempDir
chown -R user1:user1 tempDir

Una volta che i file sono sincronizzati con quella directory, vengono automaticamente visualizzati nella directory della user2 jail e lui può leggerli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.