2013-01-16 6 views
8

L'obiettivo è sincronizzare le cartelle locali e remote su ssh.Sincronizzazione delle directory locali e remote utilizzando rsync + ssh + public key come utente diverso dal proprietario della chiave ssh

mio utente corrente è user1, e ho una messa a punto di accesso senza password tramite ssh a un server server1. Voglio sincronizzare la cartella locale con una cartella su server1 tramite l'utilità rsync. Normalmente avrei correre:

rsync -rtvz /path/to/local/folder server1:/path/to/remote/folder 

ssh opere di accesso come previsto, rsync è in grado di connettersi tramite SSH, ma restituisce "Permesso negato" errore perché il server1 cartella /path/to/remote/folder è di proprietà di user2: user2. I permessi dei file della cartella non gli permettono di essere alterato da nessun altro. user1 è un sudoer su server1 così sudo su - user2 opere durante ssh sessione. Come prevedere rsync per passare l'utente quando è ssh 'ed al server?

Aggiunta user1 al gruppo user2 non è un'opzione, perché tutta la gestione utente/gruppo sul server avviene automaticamente e replicata da un repo centrale ogni X minuti, che non hanno accesso.

Uguale per modificare le autorizzazioni/proprietà della cartella di destinazione: viene aggiornato automaticamente su base regolare con un ripristino di tutte le autorizzazioni.

Possibile soluzione venire in mente è uno script che sincronizza la cartella locale con una cartella remota intermedio temporaneo di proprietà di user1 sul server, e quindi sincronizza due cartelle telecomandi come utente2.

Googling per una soluzione più corta e più carina non ha avuto alcun successo.

risposta

5

non l'ho provato da solo, ma come circa usando rsync di '--rsync-path' opzione?

rsync -rtvz --rsync-path='sudo -u user2 rsync' /path/to/local/folder server1:/path/to/remote/folder 
+0

Questo è esattamente ciò di cui ho bisogno. Funziona come previsto. Molte grazie! – schatten

0

Impostare senza password di accesso per user1 per accedere user2 @ server1, quindi fare:

rsync -rtvz /path/to/local/folder [email protected]:/path/to/remote/folder 
+1

Intendi aggiungere la chiave pubblica di _user1_ all'elenco delle chiavi ssh autorizzate di _user2_? Se sì, anche quelli vengono sovrascritti. – schatten

1

Per risolvere il problema delle autorizzazioni è necessario eseguire rsync su una una sessione SSH che registra in remotamente come utente2:

rsync avz -e 'ssh -i privatekeyfile' /path/to/local/folder/ [email protected]:/path/to/local/folder 

La seguente risposta spiega come impostare i tasti SSH.

+0

Non ci sono problemi di permessi. _user1_ ha le chiavi SSH configurate e _user1_ è un sudoer sulla macchina remota. Quindi potenzialmente _user1_ ha tutti i privilegi necessari per eseguire attività rsync. – schatten

+0

@schatten Si tratta di un problema di autorizzazioni. Di default rsync non userà sudo come la tua risposta accettata ha dimostrato. In realtà è abbastanza intelligente come si possa adattare rsync in questo modo! –