[Risolto] Crontab e rsync in rete con ssh

Installazione, configurazione e uso di Ubuntu come server: web, ftp, mail, news, proxy, dns e altro.
Avatar utente
Sam9999
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1983
Iscrizione: lunedì 9 giugno 2014, 8:59
Desktop: Studio Xfce
Distribuzione: Ubuntu 20.04 LTS (Focal)
Località: BO
Contatti:

[Risolto] Crontab e rsync in rete con ssh

Messaggio da Sam9999 »

in crontab ho settato vari backup da fare periodicamente.
Tutto bene in locale, ma se provo a fare dei backup da un server all'altro, a manina li faccio ed inserisco la password di accesso, mentre se li voglio impostare in crontab non pare vi sia la possibilità di settare una passwword nella linea di comando.

Esempio, eseguo la copia di un utente:

Codice: Seleziona tutto

sudo rsync -azv -e ssh /home/utente utente@192.168.0.10:/home
Se metto lo stesso comando in crontab non lo esegue in quanto non c'è la password dell'utente per connettersi all'altra macchina.

E' possibile passare la password, nel comando rsync, all'opzione ssh ?

Trovato, Paswordless Rsync Over SSH Without Key Authentication [Un-Safe], in maniera poco sicura si può usare il comando sshpass

Codice: Seleziona tutto

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/
Intanto che imparo come usare le chiavi ssh....
Ultima modifica di Sam9999 il lunedì 11 giugno 2018, 10:29, modificato 1 volta in totale.
-------------
S. @-M.
-------------
Avatar utente
Filoteo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1315
Iscrizione: venerdì 28 agosto 2015, 9:38
Desktop: Gnome
Distribuzione: Arch Linux

Re: Crontab e rsync in rete con ssh

Messaggio da Filoteo »

La soluzione l'hai suggerita tu, cioè usare le chiavi ssh. Aggiungo: usare chiavi ssh e consentire solo il comando di backup per la specifica chiave.

Crea una chiave di 2048 bit chiamata rsync e senza password

Codice: Seleziona tutto

ssh-keygen -f ~/.ssh/rsync -b 2048 -N ''
Copia la chiave pubblica sul server

Codice: Seleziona tutto

ssh-copy-id -i ~/.ssh/rsync utente@192.168.0.10
Ora potresti già far partire rsync senza password in questo modo

Codice: Seleziona tutto

rsync -azv -e "ssh -i /home/utente/.ssh/rsync" /home/utente utente@192.168.0.10:/home
Tuttavia per rafforzare la sicurezza facciamo in modo che quella chiave pubblica possa essere usata SOLO per eseguire quel comando di rsync. Dobbiamo vedere quale comando venga eseguito sul server, quindi fai

Codice: Seleziona tutto

rsync -azv -e "ssh -v -i /home/utente/.ssh/rsync" /home/utente utente@192.168.0.10:/home
Nell'output dovresti avere una riga con

Codice: Seleziona tutto

debug1: Sending command: rsync...
Copia quel comando, poi connettiti al server e apri il file

Codice: Seleziona tutto

~/.ssh/authorized_keys
Modificalo in modo da avere

Codice: Seleziona tutto

command="comando che hai copiato poco fa",restrict ssh-rsa ...
Nel mio caso avrei

Codice: Seleziona tutto

command="rsync --server -vlogDtprze.iLsfxC . /home/filoteo/test",restrict ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4mq...
Salva ed esci. Dovresti riuscire a eseguire il backup col comando di prima

Codice: Seleziona tutto

rsync -azv -e "ssh -i /home/utente/.ssh/rsync" /home/utente utente@192.168.0.10:/home
Invece se provi a connetterti via ssh con quella chiave, dovrebbe fallire

Codice: Seleziona tutto

ssh -i ~/.ssh/rsync utente@192.168.0.10
Avatar utente
Sam9999
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1983
Iscrizione: lunedì 9 giugno 2014, 8:59
Desktop: Studio Xfce
Distribuzione: Ubuntu 20.04 LTS (Focal)
Località: BO
Contatti:

Re: Crontab e rsync in rete con ssh

Messaggio da Sam9999 »

Ciao, grazie per la guida, mi sono perso già dopo il terzo passaggio, ma appena possibile o succede un problema, magari sarà meglio che la capisca tutta e la applichi. :birra:

Poi sto valutando anche perché se devo speciicare i comandi in :
command="comando che hai copiato poco fa",restrict ssh-rsa ...

Codice: Seleziona tutto
command="rsync --server -vlogDtprze.iLsfxC . /home/filoteo/test",restrict ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4mq...
Io ho postato un comando, ma in realtà ne sono una 15ina.. perché 3 utenti e varie altre cartelle che sincronizzo con rsync, quindi sarebbe da configurarli uno per volta tutti... :birra:

Almeno fino al terzo passaggio lo sto applicando ..
Se mi connetto da piu' di un computer per il backup, eseguo la stessa procedura oppure poi succede che le chiavi si sovrascrivono?

A quanto pare non si sovrascrivono... funziona.

problema, mentre mi sta funzionando per un utente sugli altri mi ha creato un problema, chiave non trovata... eppure l'ho inviata...

Codice: Seleziona tutto

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/sam/.ssh/rsync.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.
		(if you think this is a mistake, you may want to use -f option)
Capito perché, devo sempre inviare la chiave in locale e non mettere l'utente remoto nel comando rsync.... "ssh -i /home/utente/.ssh/rsync"

Ci dovrebbe essere una procedura simile anche per sftp... ma sempre da un altro client remoto al quale do acceso per un backup, però il client è windows....
-------------
S. @-M.
-------------
Avatar utente
Filoteo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1315
Iscrizione: venerdì 28 agosto 2015, 9:38
Desktop: Gnome
Distribuzione: Arch Linux

Re: [Risolto] Crontab e rsync in rete con ssh

Messaggio da Filoteo »

La chiave privata "~/.ssh/rsync" la copi su tutti i CLIENT dai quali vuoi connetterti per lanciare il comando rsync. La chiave pubblica "~/.ssh/rsync.pub" la copi con ssh-copy-id su tutti i SERVER dove vuoi effettuare il backup.

Nello specifico ssh-copy-id copia la chiave pubblica "~/.ssh/rsync.pub" nel file "~/.ssh/authorized_keys" dell'utente remoto (basta farlo una volta sola). Puoi usare la stessa chiave pubblica su più server e su più utenti alla volta.

Codice: Seleziona tutto

/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.
Ti ha dato errore perché hai provato a copiare la chiave più volte.
Capito perché, devo sempre inviare la chiave in locale e non mettere l'utente remoto nel comando rsync.... "ssh -i /home/utente/.ssh/rsync"
Sì, è l'utente locale, la confusione sì è generata perché ho usato "utente" in tutti gli esempi.

Codice: Seleziona tutto

command="comando che hai copiato poco fa",restrict ssh-rsa ...
Funziona per un comando solo, quindi o generi più chiavi e a ogni chiave assegni un comando oppure crei uno script sul server che discrimini in base al "comando che hai copiato poco fa" (servirebbero maggiori dettagli su ciò che vuoi fare in tal caso).

Se preferisci facilitarti il lavoro puoi anche fermarti al 3 passaggio, però sappi che nel caso la chiave privata ti venisse sottratta sarebbe possibile accedere a tutti i server che hai "seminato" con la chiave pubblica.
Avatar utente
Sam9999
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1983
Iscrizione: lunedì 9 giugno 2014, 8:59
Desktop: Studio Xfce
Distribuzione: Ubuntu 20.04 LTS (Focal)
Località: BO
Contatti:

Re: [Risolto] Crontab e rsync in rete con ssh

Messaggio da Sam9999 »

Grazie, si, mi sono fermato al terzo passaggio per ora.
Ho "seminato" un server che è sotto la scrivania, ed una altro nel corridoio, difficilmente accessibili, credo, dall'esterno (specie il secondo che proprio non ha, quasi, porte aperte fuori dal router), nel senso che non li uso da remoto per inviare il comando rsynch ma in rete locale ed anche la porta ssh esterna non è la 22 ed attualmente non subisce attacchi.
-------------
S. @-M.
-------------
Scrivi risposta

Ritorna a “Ubuntu su server”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti