Introduzione

Secure Shell (SSH) è un protocollo di rete crittografica utilizzato per una connessione crittografata tra un client e un server. Il client ssh crea una connessione sicura al server SSH su una macchina remota. La connessione crittografata può essere utilizzata per eseguire comandi sul server, tunneling X11, port forwarding e altro.

Esistono numerosi client SSH disponibili sia gratuitamente che commerciali, con OpenSSH che è il client più utilizzato. È disponibile su tutte le principali piattaforme, tra cui Linux, OpenBSD, Windows, macOS e altri.

In questo articolo, spiegheremo come utilizzare il client della riga di comando OpenSSH (ssh) per accedere a una macchina remota ed eseguire comandi o eseguire altre operazioni.

OpenSSH

Il programma client OpenSSH viene chiamato ssh e può essere richiamato dal terminale. Il pacchetto client OpenSSH fornisce anche altre utilità SSH come scp e sftp che sono installate insieme al comando ssh.

Installare il client OpenSSH su Linux

Il client OpenSSH è preinstallato sulla maggior parte delle distribuzioni Linux per impostazione predefinita. Se il tuo sistema non ha il client ssh installato, puoi installarlo usando il gestore pacchetti della tua distribuzione.

Installare OpenSSH su Ubuntu e Debian

sudo apt update
sudo apt install openssh-client

Installare OpenSSH su CentOS e Fedora

sudo dnf install openssh-clients

Installare OpenSSH su Windows 10

La maggior parte degli utenti Windows utilizza Putty per connettersi a un computer remoto tramite SSH. Tuttavia, le ultime versioni di Windows 10 includono un client e un server OpenSSH. Entrambi i pacchetti possono essere installati tramite la GUI o PowerShell.

Per trovare il nome esatto del pacchetto OpenSSH, digitare il comando seguente:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Il comando dovrebbe restituire un messaggio di output simile al seguente:

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

Una volta che conosci il nome del pacchetto installalo eseguendo:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

In caso di successo, l'output sarà simile al seguente:

Path          :
Online        : True
RestartNeeded : False

Installare OpenSSH su macOS

macOS viene fornito con il client OpenSSH installato per impostazione predefinita.

Come usare il comando ssh

Per poter accedere a una macchina remota tramite SSH devono essere soddisfatti i seguenti requisiti:

  • Un server SSH deve essere in esecuzione sul computer remoto.
  • La porta SSH deve essere aperta nel firewall del computer remoto.
  • È necessario conoscere il nome utente e la password dell'account remoto. L'account deve disporre dei privilegi adeguati per l'accesso remoto.

La sintassi di base del comando ssh è la seguente:

ssh [OPTIONS] [[email protected]]:HOST

Per utilizzare il comando ssh, apri il tuo Terminale o PowerShell e digita ssh seguito dall'hostname remoto:

ssh ssh.noviello.it

Quando ti connetti a una macchina remota tramite SSH per la prima volta, vedrai un messaggio come di seguito.

The authenticity of host 'ssh.noviello.it (192.111.122.333)' can't be established.
ECDSA key fingerprint is SHA256:PvzTdh83hdjaie8dhqEzz38fhF7lgA/9/2bLSiO3QQQBFG.
Are you sure you want to continue connecting (yes/no)?

Ogni host ha un'impronta digitale unica memorizzata nel file ~/.ssh/known_hosts.

Digita yes per memorizzare l'impronta digitale remota e ti verrà chiesto di inserire la password.

Warning: Permanently added 'ssh.noviello.it' (ECDSA) to the list of known hosts.

[email protected]'s password:

Dopo aver inserito la password, si accederà al computer remoto.

Quando non viene fornito il nome utente, il comando ssh utilizza l'attuale nome di accesso al sistema.

Per accedere come un altro utente, specificare il nome utente e l'host nel seguente formato:

ssh [email protected]

Il nome utente può anche essere specificato con l'opzione -l:

ssh -l username hostname

Per impostazione predefinita, quando non viene fornita alcuna porta, il client SSH tenterà di connettersi al server remoto sulla porta 22. Su alcuni server, gli amministratori stanno cambiando la porta SSH predefinita per aggiungere un ulteriore livello di sicurezza al server riducendo il rischio di attacchi automatizzati.

Per connettersi su una porta non predefinita, utilizzare l'opzione -p per specificare la porta:

ssh -p 5522 [email protected]

Se si verificano problemi di autenticazione o di connessione, utilizzare l'opzione -v per indicare al comando ssh di stampare i messaggi di debug:

ssh -v [email protected]

Per aumentare il livello di verbosità, utilizzare -vv o -vvv.

Il comando ssh accetta una serie di opzioni.

Per un elenco completo di tutte le opzioni leggi la pagina man ssh digitando nel terminale:

man ssh

File di configurazione SSH

Se ti connetti a più sistemi remoti su SSH su base giornaliera, scoprirai che ricordare tutti gli indirizzi IP remoti, nomi utente diversi, porte non standard e varie opzioni della riga di comando è difficile, se non impossibile.

Il client OpenSSH legge le opzioni impostate nel file di configurazione per utente ( ~/.ssh/config). In questo file, è possibile memorizzare diverse opzioni SSH per ogni macchina remota a cui ci si connette.

Di seguito è mostrato un esempio di configurazione SSH:

Host dev
    HostName dev.noviello.it
    User alice
    Port 4422

Quando si richiama il client ssh digitando il comando ssh dev, il file ~/.ssh/config verrà letto e verranno utilizzati i dettagli di connessione specificati per l'host dev. In questo esempio, ssh dev è equivalente al seguente:

ssh -p 4422 [email protected]

Per ulteriori informazioni, consultare l'articolo sul file di configurazione SSH.

Autenticazione con chiave pubblica

Il protocollo SSH supporta vari meccanismi di autenticazione.

Il meccanismo di autenticazione basato su chiave pubblica consente di accedere al server remoto senza digitare la password.

Questo metodo funziona generando una coppia di chiavi crittografiche utilizzate per l'autenticazione. La chiave privata viene archiviata sul dispositivo client e la chiave pubblica viene trasferita su ciascun server remoto a cui si desidera accedere. Il server remoto deve essere configurato per accettare l'autenticazione con chiave.

Se non disponi già di una coppia di chiavi SSH sul tuo computer locale, puoi generarne una digitando:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Ti verrà chiesto di digitare una passphrase sicura. Se vuoi usare la passphrase dipende da te.

Una volta che hai la tua coppia di chiavi, copia la chiave pubblica sul server remoto:

ssh-copy-id [email protected]

Immettere la password dell'utente remoto e la chiave pubblica verrà aggiunta al file authorized_keys dell'utente remoto .

Una volta caricata la chiave, è possibile accedere al server remoto senza che sia richiesta una password.

Impostando un'autenticazione basata su chiave, è possibile semplificare il processo di accesso e aumentare la sicurezza generale del server.

Port forwarding

Il tunneling SSH o il port forwarding SSH è un metodo per creare una connessione SSH crittografata tra un client e una macchina server attraverso la quale è possibile inoltrare le porte dei servizi.

L'inoltro SSH è utile per trasportare dati di rete di servizi che utilizzano un protocollo non crittografato, come VNC o FTP, accedere a contenuti con restrizioni geografiche o bypassare i firewall intermedi. Fondamentalmente, è possibile inoltrare qualsiasi porta TCP e tunnelizzare il traffico su una connessione SSH sicura.

Esistono tre tipi di port forwarding SSH:

Port Forwarding locale

Il port forwarding locale consente di inoltrare una connessione dall'host client all'host del server SSH e quindi alla porta host di destinazione.

Per creare un port forwarding locale utilizzare l'opzione -L al client ssh:

ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f [email protected]

L'opzione -f indica al comando ssh di essere eseguito in background e il flag -N indica di non eseguire un comando remoto.

Port Forwarding remoto

Il port forwarding remoto è l'opposto del port forwarding locale. Inoltra una porta dall'host del server all'host del client e quindi alla porta dell'host di destinazione.

L'opzione -L dice al comando ssh di creare un port forwarding remoto:

ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f [email protected]

Port Forwarding dinamico

Il port forwarding dinamico crea un server proxy SOCKS che consente la comunicazione attraverso un intervallo di porte.

Per creare un port forwarding dinamico (SOCKS) passare l'opzione -D al client ssh:

ssh -R [LOCAL_IP:]LOCAL_PORT  -N -f [email protected]

Per informazioni più dettagliate e istruzioni dettagliate, consultare l'articolo su Come impostare il tunneling SSH (Port Forwarding).

Conclusione

Per connettersi a un server remoto tramite SSH, utilizzare il comando ssh seguito dal nome utente remoto e dall'hostname ssh [email protected].

Sapere come utilizzare il comando ssh è essenziale per la gestione del server remoto.