Come posso risincronizzare senza richiedere la password, senza utilizzare l'autenticazione con chiave pubblica?


45

Devo eseguire rsync, senza che mi richieda la password.

Ho visto nella rsyncmanpage che non consente di specificare la password come argomento della riga di comando.
Ma ho notato che consente di specificare la password tramite la variabile RSYNC_PASSWORD.

Quindi ho provato ad esportare la variabile, ma rsynccontinua a chiedermi la password.

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

Che cosa sto facendo di sbagliato?

Si prega di prendere in considerazione:

In altre parole, ho bisogno che l' RSYNC_PASSWORDapproccio funzioni! :-)


hai abilitato il demone rsync sul server remoto?
Rahul Patil,

Risposte:


13

Questa variabile d'ambiente password sembra essere utilizzata solo quando si utilizza il protocollo rsync:

rsync rsync://username@1.2.3.4:/abc /def

Perché questo funzioni, è necessario eseguire anche rsync come demone ( --daemonopzione), cosa che spesso viene fatta usando inetd.conf.

Quando si utilizza questo protocollo, abcdeve corrispondere a una destinazione definita in /etc/rsyncd.conf. Il nome utente dovrebbe essere presente in una auth usersriga per questo target e un file di password deve essere specificato con l' secrets fileopzione.

È questo file segreto che contiene i mapping tra nomi utente e password nel seguente formato:

username:password

Ed è questa password che puoi specificare usando la variabile d'ambiente RSYNC_PASSWORD.


un modo rapido per eseguire un server rsync è con https://s3.amazonaws.com/skaperen/rsend
Skaperen

65

Se il rsyncdemone non è in esecuzione sul computer di destinazione e non ti interessa esporre le password a tutti sul computer locale ( Perché qualcuno non dovrebbe usare le password nella riga di comando? ), Puoi usare sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

Nota lo spazio all'inizio del comando, nella bashshell questo impedirà al comando (e alla password) di essere archiviato nella cronologia. Non consiglio di usare la RSYNC_PASSWORDvariabile se non assolutamente necessario (come da una modifica precedente a questa risposta), consiglio di sopprimere l'archiviazione della cronologia o almeno di cancellare la cronologia dopo. Inoltre, è possibile utilizzare tput resetper cancellare la cronologia dei terminali.


2
Perché consiglieresti di aggiungere una password per cancellare il testo in un comando, questo è un cattivo linux admin 101.
Eddie

Super utile .. sto cercando un approccio a questo per un po '. Grazie.
Isaac Gregson,

6
Anche se è male aggiungere la password come testo in chiaro, questo è attualmente l'unico modo ragionevolmente semplice per farlo.
Weston Ganger,

15
puoi sempre fare qualcosa del genere: sshpass -p $(cat passFile) ..nascondere un passaggio chiaro nella storia bash, e chmod 400 su passFile per proteggerlo
Kresimir Pendic

3
So che questo è vecchio, ma per il bene dei nuovi lettori, per favore cita la password - le password possono contenere caratteri e spazi speciali. -p "$RSYNC_PASSWORD"
Paddy Landau,

16

È possibile utilizzare le identità ssh standard per eseguire l'accesso senza password. Questo viene gestito per impostazione predefinita se si dispone di un ~/.ssh/id_rsao simili, ma è anche possibile codificare il proprio percorso verso la chiave privata di una coppia di chiavi autorizzata.

Ciò consente il batch / scripting senza esporre le password e la chiave pubblica può essere rimossa dal server di destinazione se la chiave privata viene mai compromessa.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

Puoi anche aggiungere argomenti come -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullnon forzare la verifica della chiave host remota. ! Attenzione: questo apre l'uomo nel mezzo degli attacchi ed è una cattiva pratica generale!


1
Questo è particolarmente utile se stai usando la nuova shell Bash per Windows 10. Mi chiedevo perché rsync non funzionasse senza password. Mi sono reso conto che stava usando la ~/.sshcartella all'interno della shell (dove vive rsync). Una volta che ho usato -e per indicare la chiave interna /mnt/c/Users/MyUsername/.ssh, ha funzionato come previsto. (Grazie.: D)
Toby Deshane,

12

Molto utile per gli script è usare l' --password-fileopzione della riga di comando.

  • Crea un file vuoto chiamato rsync_pass
  • scrivi la password in questo file (niente di più)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Questo può essere utilizzato per gli script e consente di essere più sicuri dell'esportazione della password nella variabile di sistema.


4
Nota per il lettore: ciò richiede anche un demone rsync in esecuzione sul server. Speravo davvero che le chiavi ssh fossero sufficienti per rsync senza password.
Sridhar Sarnobat,

IMHO questo è l'unico modo corretto per farlo se non si vuole usare ssh.
maxf130,

Questa risposta ha più senso
AJ Meyghani il
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.