Copiare file o cartelle da un sistema locale a un sistema remoto e viceversa con ssh

SSH (Secure SHell, shell sicura) è un protocollo che permette di stabilire una sessione remota cifrata tramite CLI con un altro host.

Pubblicato da ,
Ultima modifica

In questo articolo vedremo come connettersi tramite ssh ad un server remoto, in particolare si presuppone che su tale server sia installato un SO Linux e i seguenti pacchetti openssh, openssh-server, openssh-clients e openssl-libs.

Per poter connettersi tramite ssh ad un server remoto bisogna:

  1. verificare che tale server abbia almeno abilitata la porta di default che è la 22;
  2. conoscere l'indirizzo ip del server.

La verifica della porta 22 si fa controllando il file sshd_config che si trova in /etc/ssh, quindi da CLI lanciamo il seguente comando

$ cd /etc/ssh && cat sshd_config

visualizzeremo così i dettagli del file sshd_config, dobbiamo verificare se la configurazione Port sia decommentata come segue

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

...............
...............

Port 22

mentre per verificare l'indirizzo ip del server si usa il seguente comando

$ ip addr show

e avremo un output simile a questo

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 6e:f2:d9:fb:4d:10 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 96:0e:7a:51:d5:c2 brd ff:ff:ff:ff:ff:ff
4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:8b:00:2c brd ff:ff:ff:ff:ff:ff
    inet 172.29.34.23/20 brd 172.29.47.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe8b:2c/64 scope link
       valid_lft forever preferred_lft forever

in questo caso l'indirizzo ip è 172.29.34.23.

Per effettuare una connessione ssh si usa la seguente sintassi da CLI

$ ssh -P <numero porta> <nomeutente>@<indirizzo ip>

dove "nomeutente" è l'utente che useremo per connetterci al server remoto, ad esempio potrebbe essere l'utente "root", "indirizzo ip" è l'indirizzo ip che abbiamo visto in precedenza, l'opzione "-P" indica il numero della porta, tale opzione può essere omessa se la porta abilitata è la 22, lanciando il comando precedente ci verrà chiesta la password dell'utente che abbiamo indicato per connetterci, di seguito è riportato un esempio

$ ssh root@172.29.34.23

Se vogliamo copiare un file dal nostro sistema locale al server remoto si usa la seguente sintassi

$ scp -P <numero porta> <percorso file locale> <nomeutente>@<indirizzo ip>:<destinazione sul server remoto>

ad esempio

$ scp \local\path\file.txt root@172.29.34.23:/var/www/vhosts/html/docroot

\local\path\file.txt è il percorso del file (file.txt) sul sistema locale, "root" è l'utente che useremo per connetterci, 172.29.34.23 è l'indirizzo ip, /var/www/vhosts/html/docroot è la destinazione sul server remoto in cui copieremo il file, anche in questo caso se la porta abilitata è quella di default cioè la 22 l'opzione "-P" può essere omessa altrimenti va specificato il numero di porta, se invece vogliamo copiare un'intera cartella dal nostro sistema locale al server remoto si usa una sintassi simile a questa

$ scp -r \local\path\img root@172.29.34.23:/var/www/vhosts/html/docroot

\local\path\img è il percorso della cartella (img) che vogliamo copiare sul server remoto, in particolare si usa l'opzione "-r" per indicare di copiare ricorsivamente l'intera directory, in entrambi i casi ci verrà chiesta la password dell'utente che in questo esempio è "root".

Nel caso contrario, cioè che vogliamo copiare dal server remoto al nostro sistema locale, la sintassi è la seguente per copiare un file

$ scp -P <numero porta> <nomeutente>@<indirizzo ip>:<percorso file sul server remoto> <destinazione locale> 

per copiare ricorsivamente un intera directory

$ scp -r -P <numero porta> <nomeutente>@<indirizzo ip>:<percorso sul server remoto> <destinazione locale>

anche in questi due casi l'opzione "-P" può essere omessa se la porta abilitata è la 22, di seguito sono riportati degli esempi

# copia file
$ scp root@172.29.34.23:/var/www/vhosts/html/docroot/file.txt \local\path\  


# copia directory
$ scp -r root@172.29.34.23:/var/www/vhosts/html/docroot/img \local\path\