Secure Shell (SSH) è un protocollo di rete crittografico 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.
Sono disponibili numerosi client SSH, sia gratuiti che commerciali, con OpenSSH che è il client più utilizzato. È disponibile su tutte le principali piattaforme, inclusi Linux, OpenBSD, Windows e macOS.
Questo articolo spiega come utilizzare il client della riga di comando OpenSSH (ssh
) per accedere a una macchina remota ed eseguire comandi o eseguire altre operazioni.
Installazione del client OpenSSH #
Il programma client OpenSSH si chiama ssh
e può essere richiamato dal terminale. Il pacchetto client OpenSSH fornisce anche altre utilità SSH come scp
e sftp
che vengono installati insieme a ssh
comando.
Installazione del client OpenSSH su Linux #
Il client OpenSSH è preinstallato sulla maggior parte delle distribuzioni Linux per impostazione predefinita. Se sul tuo sistema non è installato il client ssh, puoi installarlo utilizzando il tuo gestore di pacchetti di distribuzione.
Installazione di OpenSSH su Ubuntu e Debian #
sudo apt update
sudo apt install openssh-client
Installazione di OpenSSH su CentOS e Fedora #
sudo dnf install openssh-clients
Installazione del client OpenSSH su Windows 10 #
La maggior parte degli utenti Windows utilizza Putty per connettersi a una macchina remota 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, digita il seguente comando:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Il comando dovrebbe restituire qualcosa del genere:
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 a questo:
Path :
Online : True
RestartNeeded : False
Installazione del client OpenSSH su macOS #
macOS viene fornito con il client OpenSSH installato per impostazione predefinita.
Come utilizzare ssh
Comando #
I seguenti requisiti devono essere soddisfatti per poter accedere a una macchina remota tramite SSH:
- Deve essere in esecuzione un server SSH sulla macchina remota.
- La porta SSH deve essere aperta nel firewall della macchina remota.
- Devi conoscere il nome utente e la password dell'account remoto. L'account deve disporre dei privilegi appropriati per l'accesso remoto.
La sintassi di base di ssh
il comando è il seguente:
ssh [OPTIONS] [USER@]:HOST
Per utilizzare ssh
comando, apri il tuo Terminale o PowerShell e digita ssh
seguito dal nome host remoto:
ssh ssh.linuxize.com
Quando ti connetti a una macchina remota tramite SSH per la prima volta, vedrai un messaggio come quello di seguito.
The authenticity of host 'ssh.linuxize.com (192.168.121.111)' can't be established.
ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY.
Are you sure you want to continue connecting (yes/no)?
Ogni host ha un'impronta digitale univoca che è memorizzata nel ~/.ssh/known_hosts
file.
Digita yes
per memorizzare l'impronta digitale remota e ti verrà chiesto di inserire la tua password.
Warning: Permanently added 'ssh.linuxize.com' (ECDSA) to the list of known hosts.
[email protected]'s password:
Una volta inserita la password, verrai connesso alla macchina remota.
Quando il nome utente non viene fornito, ssh
comando utilizza il nome di accesso del sistema corrente.
Per accedere come utente diverso, specifica il nome utente e l'host nel seguente formato:
ssh username@hostname
Il nome utente può anche essere specificato con -l
opzione:
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 modificando la porta SSH predefinita per aggiungere un ulteriore livello di sicurezza al server riducendo il rischio di attacchi.
Per connetterti su una porta non predefinita, usa il -p
opzione per specificare la porta:
ssh -p 5522 username@hostname
Se riscontri problemi di autenticazione o connessione, utilizza il -v
opzione per dire a ssh
per stampare messaggi di debug:
ssh -v username@hostname
Per aumentare il livello di verbosità, usa -vv
o -vvv
.
Il ssh
il comando accetta una serie di opzioni.
Per un elenco completo di tutte le opzioni leggi ssh
pagina man digitando man ssh
nel tuo terminale.
File di configurazione SSH #
Se ti connetti quotidianamente a più sistemi remoti tramite SSH, 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 puoi memorizzare diverse opzioni SSH per ogni macchina remota a cui ti connetti.
Di seguito viene mostrata una configurazione SSH di esempio:
Host dev
HostName dev.linuxize.com
User mike
Port 4422
Quando invochi il client ssh digitando ssh dev
, il comando leggerà il ~/.ssh/config
file e utilizzare i dettagli di connessione specificati per l'host di sviluppo. In questo esempio, ssh dev
è equivalente al seguente:
ssh -p 4422 [email protected]
Per ulteriori informazioni, consulta l'articolo sul file di configurazione SSH.
Autenticazione chiave pubblica #
Il protocollo SSH supporta vari meccanismi di autenticazione.
Il meccanismo di autenticazione basato su chiave pubblica ti consente di accedere al server remoto senza dover digitare la tua 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 a ciascun server remoto a cui si desidera accedere. Il server remoto deve essere configurato per accettare l'autenticazione della chiave.
Se non hai già 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 una passphrase, dipende da te.
Una volta ottenuta la coppia di chiavi, copia la chiave pubblica sul server remoto:
ssh-copy-id username@hostname
Inserisci la password dell'utente remoto e la chiave pubblica verrà aggiunta all'utente remoto authorized_keys
file.
Una volta caricata la chiave, puoi accedere al server remoto senza che ti venga richiesta una password.
Impostando un'autenticazione basata su chiave, puoi 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 il trasporto di dati di rete di servizi che utilizzano un protocollo non crittografato, come VNC o FTP, per l'accesso a contenuti con restrizioni geografiche o per aggirare i firewall intermedi. Fondamentalmente, puoi inoltrare qualsiasi porta TCP e incanalare il traffico su una connessione SSH sicura.
Esistono tre tipi di port forwarding SSH:
Inoltro alla porta locale #
Il port forwarding locale consente di inoltrare una connessione dall'host client all'host del server SSH e quindi alla porta dell'host di destinazione.
Per creare un port forwarding locale, passa il -L
opzione per ssh
cliente:
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION_HOST:DESTINATION_PORT -N -f username@hostname
L'opzione -f dice a ssh
comando da eseguire in background e -N
non eseguire un comando remoto.
Inoltro porta remota #
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.
Il -R
l'opzione dice ssh
per creare un port forwarding remoto:
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT -N -f username@hostname
Inoltro dinamico delle porte #
Il port forwarding dinamico crea un server proxy SOCKS che consente la comunicazione su un intervallo di porte.
Per creare un port forwarding dinamico (SOCKS) passare il -D
opzione per il client ssh:
ssh -D [LOCAL_IP:]LOCAL_PORT -N -f username@hostname
Per informazioni più dettagliate e istruzioni dettagliate, consulta l'articolo su Come configurare il tunneling SSH (port forwarding).
Conclusione #
Per connetterti a un server remoto tramite SSH, usa ssh
comando seguito dal nome utente remoto e dal nome host (ssh username@hostname
).
Saper usare il ssh
comando è essenziale per la gestione dei server remoti.
Se hai domande, lascia un commento qui sotto.