Come copiare files da un server Ubuntu ad un altro server utilizzando la connessione SSH e solo comandi da console
Se avete la necessità di copiare files o cartelle da un server UBUNTU ad un altro utilizzando esclusivamente la console quello che vi propongo è un metodo davvero semplice e funzionale.
Utilizzo il comando linux RSYNC presente su tutte le ultime installazioni di UBUNTU e come connessione sfrutto SSH piuttosto che FTP.
La guida, e la conseguente prova che vi propongo, l’ho realizzata utilizzando una installazione di UBUNTU Server 14.04 ma dovrebbe funzionare con tutte le release successive ( e probabilmente anche le precedenti ).
Vediamo anzitutto cosa occorre per copiare un file o una cartella da un server Ubuntu ad un altro utilizzando la console
- Ovviamente 2 Server Ubuntu raggiungubili sulla rete ( non è importante se locale o Internet )
- Account amministrativi su entrambi i server
- Il servizio SSH attivo ( quello che probabilmente usate per connettervi alla console via Putty )
Step 1 – Generazione di una ” public SSH keys “
Sul nostro server di origine, generiamo le chiavi pubbliche SSH senza password:
da console scrivete :
ssh-keygen -f ~/.ssh/id_rsa -q -P ""
cat ~/.ssh/id_rsa.pub
Questa è la nostra chiave SSH pubblica che può essere posizionata su altri host per darci accesso, nel nostro caso sul nostro altro server…
ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxxxxxxxxxxxxxxxxxxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root@blograffo
N.B. Ovviamente la vostra chiave sarà composta da tanti caratteri diversi… io NON HO pubblicato la mia chiave
Step 2 – Copia della chiave pubblica sul Server di destinazione
Copiate questa chiave negli appunti del computer e accedete all’altro server ( quello di destinazione).
Mettete la chiave SSH in una delle seguenti :
- /etc/ssh/authorized_keys
- ~/.ssh/authorized_keys ( cioè /root/.ssh/authorized_keys )
o dovunque abbiate deciso nella eventuale personalizzazione della vostra installazione di SSH
Se il file authorized_keys non esiste, createlo pure.
Step 3 – Rsync Trasferimento del file
Per la copia utilizzo RSYNC , in quanto consente, tra le altre cose, di copiare i file in modo ricorsivo, con la compressione e su un canale crittografato.
Copiamo un file dal nostro server di origine sul nostro server di destinazione
Accediamo sul primo server ( server di origine ) e da console lanciamo il comando :
rsync -avz -e "ssh -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null" --progress /cartellaorigine/nomefileorigine.est indirizzoserverdestinazione.dyndns.org:/cartelladestinazione/nomefiledestinazione.est
Se si utilizza un utente diverso, ad esempio “nomeutente”, è necessario aggiungerlo davanti al server di destinazione:
rsync -v -e "ssh -p22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /cartellaorigine/nomefileorigine.est [email protected]:/cartelladestinazione/nomefiledestinazione.est
Alcune precisazioni :
- il parametro p22 dentro le virgolette indica la porta d’ascolto SSH…se l’avete cambiata dovete modificare queto dato
- –progress potete ometterlo se non volete la visualizzazione del temporestante alla copia
- sulla cartella di destinazione l’utente deve avere i diritti di scrittura
Uso questa tecnica per mantenere aggiornati e sincronizzati più server che ospitano il mio blog…
Potete farlo anche voi combinando una serie di comandi
Backup e copia di un database MySql
mysqldump -uroot -pPassword nomedatabase > /cartellaorigine/backup.sql
rsync -v -e "ssh -p22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress
/cartellaorigine/backup.sql [email protected]:/cartelladestinazione/backup.sql
Ovviamente i 2 comandi possono essere combinati all’interno di un file eseguibile .sh in modo che il backup ed il trasferimento su altro server siamo automatici
#!/bin/sh
#Copia passo passo database di blograffo
#
echo "Creo il backup di MySQL"
mysqldump -uroot -pPassword nomedatabase > /cartellaorigine/backup.sql
echo "Trasferisco il Backup su BLograffo"
rsync -v -e "ssh -p22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /cartellaorigine/backup.sql [email protected]:/cartelladestinazione/backup.sql
echo "***FINE backup di MySQL"
>Per dubbi o suggerimenti…ci scriviamo nei commenti