Comando SSH: uso delle opzioni -l, -p e -i e verifica degli errori di connessione
Il comando SSH è il comando del client OpenSSH che si collega a un server Linux remoto tramite una connessione cifrata nella forma ssh account@indirizzo-del-server ed esegue comandi sul server a cui si è collegato. Abbiamo eseguito ssh da un server AlmaLinux 9 verso un server Debian 12 e verificato in ordine tutto, dal controllo della chiave host alla prima connessione fino alle opzioni -l, -p e -i, all'esecuzione di comandi remoti e all'output di debug di -v. È emerso che il modo in cui le opzioni vengono davvero applicate si può verificare in anticipo con ssh -G, senza collegarsi.
L'output qui sotto è esattamente quello ottenuto sui due server. L'indirizzo del server e l'account, il nome host, il percorso e l'impronta della chiave e i numeri di versione di OpenSSL e del kernel del server che si collega sono stati sostituiti con valori di esempio. Il server AlmaLinux che si collega usa l'account root, il server Debian che riceve la connessione usa un account normale.
1️⃣ Uso di base del comando SSH
Per accedere a un server remoto si scrive dopo ssh il nome dell'account e l'indirizzo del server uniti da @. Dopo l'accesso il prompt diventa quello del server collegato, e digitando exit si chiude la connessione e si torna al server di partenza.
ssh user@192.0.2.10Linux server2 6.1.0-53-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.187-1 (2026-09-07) x86_64
Last login: Wed Oct 28 20:27:41 2026 from 198.51.100.7
[user]:~$ whoami
user
[user]:~$ exit
exit
Connection to 192.0.2.10 closed.Il server Debian a cui ci siamo collegati ha mostrato all'accesso anche alcune righe di avviso del server (motd) e una notifica di posta; dall'output qui sopra sono state tolte solo quelle righe.
Alla prima connessione a un server, ssh mostra prima dell'accesso l'impronta della chiave host del server e chiede se continuare. Digitando yes, la chiave host è stata salvata in ~/.ssh/known_hosts e poi è comparso il risultato di whoami.
ssh user@192.0.2.10 whoamiThe authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userDopo il salvataggio della chiave in known_hosts, la domanda non è più comparsa nelle connessioni successive allo stesso server. Se l'impronta non corrisponde al valore ricevuto dall'amministratore del server, digita no. Digitando no, ssh è terminato senza collegarsi.
ssh user@192.0.2.10The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no
Host key verification failed.Terminando con no, il file known_hosts non è stato creato. Per questo alla connessione successiva compare di nuovo la stessa domanda.
2️⃣ Opzioni del comando SSH
Le opzioni di ssh si scrivono prima della destinazione della connessione. Eseguendo solo ssh, è comparso come istruzioni d'uso l'elenco delle opzioni disponibili.
sshusage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
[-c cipher_spec] [-D [bind_address:]port] [-E log_file]
[-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
[-J destination] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
destination [command [argument ...]]
ssh [-Q query_option]Se si passa un'opzione che non è nelle istruzioni d'uso, compare l'errore [unknown option] insieme alle stesse istruzioni.
-V mostra la versione installata del client OpenSSH. Qui sotto c'è il risultato del server AlmaLinux che si collega; sul server Debian 12 che riceve la connessione è comparso OpenSSH_9.2p1.
ssh -VOpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025-G non si collega al server: unisce le opzioni indicate e i file di configurazione e mostra i valori che verranno davvero applicati. L'output completo è di 87 righe, quindi scegliamo con grep solo le righe che servono.
ssh -G user@example.com | grep -E "^(user|hostname|port|identityfile|connecttimeout|stricthostkeychecking|serveraliveinterval) "user user
hostname example.com
port 22
stricthostkeychecking ask
serveraliveinterval 0
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
connecttimeout noneLe sette righe identityfile sono i file di chiave predefiniti che ssh cerca in ordine quando -i non è indicato. connecttimeout none significa che non è stato fissato un tempo di attesa per la connessione.
| Opzione | Copia | Descrizione |
|---|---|---|
| -lAccount | Indica il nome dell'account con cui collegarsi | |
| -pPorta | Indica la porta a cui collegarsi (predefinita 22) | |
| -iFile di chiave | Indica il file della chiave privata | |
| -v | Mostra il processo di connessione in righe debug1 | |
| -C | Comprime i dati scambiati | |
| -X | Inoltro X11 (programmi GUI remoti) | |
| -T | Non assegna un terminale virtuale | |
| -t | Forza l'assegnazione di un terminale virtuale | |
| -n | Reindirizza lo standard input su /dev/null | |
| -q | Riduce avvisi e messaggi informativi | |
| -oopzione=valore | Imposta un'opzione del file di configurazione solo per questa connessione | |
| -L | Port forwarding locale | |
| -F | Indica il file di configurazione | |
| -G | Mostra le impostazioni applicate, senza collegarsi | |
| -V | Mostra la versione del client OpenSSH |
| Opzione | Copia | Descrizione |
|---|---|---|
| -N | Mantiene solo la connessione, senza comando remoto | |
| -J | Si collega passando per un altro server |
3️⃣ L'opzione ssh -l e il port forwarding con -L
-l è l'opzione che indica il nome dell'account con cui collegarsi. ssh -l user 192.0.2.10 si è collegato con lo stesso account di ssh user@192.0.2.10.
ssh -l user 192.0.2.10 whoamiuserIl controllo con -G ha mostrato che l'account indicato con -l era nella voce user.
ssh -G -l admin example.com | grep -E "^(user|hostname|port) "user admin
hostname example.com
port 22Con -G abbiamo verificato anche quale vale quando si scrivono insieme -l e account@indirizzo. Con OpenSSH 9.9p1 è stato applicato admin, indicato con -l.
ssh -G -l admin user@example.com | grep -E "^(user|hostname) "user admin
hostname example.comLa -L maiuscola ha un nome simile, ma è un'opzione di port forwarding locale che non ha a che fare con l'account. Fa passare le connessioni che arrivano a una porta del tuo server dentro la connessione SSH e le collega a un indirizzo e una porta dal lato del server remoto.
8080:localhost:80 significa collegare la porta 8080 del tuo server alla porta 80 di localhost vista dal server remoto. Il controllo con -G ha mostrato lo stesso valore nella voce localforward.
ssh -G -L 8080:localhost:80 user@example.com | grep -E "^(hostname|localforward) "hostname example.com
localforward 8080 [localhost]:80Se vuoi solo tenere aperto un tunnel, aggiungi anche -N, che mantiene la connessione senza comando remoto.
4️⃣ Indicare porta e file di chiave SSH
Se il server SSH accetta connessioni su una porta diversa dalla 22, indica la porta con -p. -i indica un file di chiave privata che non ha il nome predefinito.
ssh -G -p 2222 -i ./mykey user@example.com | grep -E "^(user|hostname|port|identityfile) "user user
hostname example.com
port 2222
identityfile ./mykeyIndicando -i, le sette righe dei file di chiave predefiniti sono sparite ed è rimasto solo il file indicato.
I file di chiave si creano con ssh-keygen. Se usi già una chiave, indica un nuovo nome di file con -f. Qui sotto c'è il risultato della creazione di una chiave ed25519 con il nuovo nome mykey.
ssh-keygen -t ed25519 -f ./mykey -N "" -C "user@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in ./mykey
Your public key has been saved in ./mykey.pub
The key fingerprint is:
SHA256:XLbhLZHSNdMvUqhSIbzRNJi/zKKkNnWmy0mTeBoUfaY user@example.com
The key's randomart image is:
+--[ED25519 256]--+
| ..=+.+o |
| . =oo+.oo |
| . . +=B. . . |
| . =o=o=. . .|
| . E S++... . |
| . .o.+ +. |
| o+== . |
| +*oo |
| ...+. |
+----[SHA256]-----+mykey è la chiave privata e mykey.pub la chiave pubblica. Il manuale di OpenSSH indica di mettere la chiave pubblica in ~/.ssh/authorized_keys sul server a cui ci si collega. Lo si può fare con ssh-copy-id, come in [ssh-copy-id -i ./mykey.pub user@192.0.2.10].
Se ti colleghi spesso allo stesso server, scrivi un alias in ~/.ssh/config e digita solo ssh seguito dall'alias. La riga Host è l'alias, e le righe sotto sono i valori applicati quando ci si collega con quell'alias.
Host myserver
HostName 192.0.2.10
User user
Port 2222
IdentityFile ~/.ssh/mykeyScrivendo queste impostazioni in un file ./config e leggendolo con -F, indirizzo, account, porta e file di chiave sono stati applicati tutti con un solo alias.
ssh -F ./config -G myserver | grep -E "^(user|hostname|port|identityfile) "user user
hostname 192.0.2.10
port 2222
identityfile ~/.ssh/mykeyLe opzioni scritte sulla riga di comando hanno la precedenza sul file di configurazione. Aggiungendo -p 22 allo stesso alias, port è passato a 22.
ssh -F ./config -G -p 22 myserver | grep -E "^(hostname|port) "hostname 192.0.2.10
port 22hostname è rimasto 192.0.2.10 come nel file di configurazione, e solo port è passato al valore scritto sulla riga di comando.
5️⃣ Eseguire comandi remoti con SSH
Se si scrive un comando dopo la destinazione della connessione, ssh esegue solo quel comando senza schermata di accesso e poi chiude la connessione. Se ci sono più comandi o simboli della shell come il punto e virgola, si racchiude tutto tra apici singoli.
ssh user@192.0.2.10 'whoami; hostname'user
server2Il codice di uscita del comando remoto è tornato invariato come codice di uscita di ssh. Negli script questo valore indica se il comando remoto è riuscito.
ssh user@192.0.2.10 'exit 3'; echo $?3Eseguendo un comando in questo modo non viene assegnato un terminale virtuale. tty eseguito con -T ha mostrato [not a tty].
ssh -T user@192.0.2.10 ttynot a ttyIl manuale di ssh descrive -t come l'opzione da usare per eseguire programmi a schermo sul server remoto. Con -t è comparso /dev/pts/0 e, alla fine, anche un messaggio che la connessione era stata chiusa.
ssh -t user@192.0.2.10 tty/dev/pts/0
Connection to 192.0.2.10 closed.Aggiungendo -q, questo messaggio non è comparso.
ssh -t -q user@192.0.2.10 tty/dev/pts/0-n reindirizza lo standard input di ssh su /dev/null. Senza -n, il cat remoto ha mostrato invariato l'hello passato tramite la pipe.
echo hello | ssh user@192.0.2.10 cathelloecho hello | ssh -n user@192.0.2.10 catAggiungendo -n allo stesso comando, hello non è arrivato al cat remoto e non è stato mostrato nulla.
6️⃣ Errori di connessione SSH e debug con ssh -v
Quando non riesci a collegarti, guarda prima il messaggio di errore per capire in quale fase si è fermato. Quando l'indirizzo del server non è stato trovato, è comparso [Could not resolve hostname].
ssh user@nosuchhost.invalidssh: Could not resolve hostname nosuchhost.invalid: Name or service not knownSe l'indirizzo è giusto ma su quella porta non risponde nessuno, compare [Connection timed out]. Con -o ConnectTimeout=5 è terminato con questo errore dopo 5 secondi.
ssh -o ConnectTimeout=5 -p 2222 user@192.0.2.10ssh: connect to host 192.0.2.10 port 2222: Connection timed outCollegandoci con -o BatchMode=yes a un server non presente in known_hosts, ssh è terminato con [Host key verification failed.] senza chiedere della chiave host. Per evitare che la prima connessione di uno script si fermi sulla domanda, si usa StrictHostKeyChecking=accept-new.
ssh -o BatchMode=yes user@192.0.2.10 trueHost key verification failed.Secondo il manuale di ssh_config, accept-new salva senza chiedere solo la chiave host dei server mai visti prima. Se arriva una chiave diversa da quella già salvata, la connessione viene rifiutata.
ssh -o StrictHostKeyChecking=accept-new user@192.0.2.10 whoamiWarning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
userSe per l'account non è registrata alcuna chiave, compare [Permission denied (publickey)]. Errori di autenticazione ripetuti possono portare il server a bloccare l'IP che si collega.
-v mostra il processo di connessione in righe debug1. L'output completo supera le 70 righe, quindi qui sotto ci sono solo le righe delle fasi di connessione e autenticazione, scelte con grep.
ssh -v -i ~/.ssh/id_ed25519 user@192.0.2.10 true 2>&1 | grep -E 'Connecting to|Connection established|remote software version|Server host key|is known and matches|can continue|Offering public key|Authenticated to|Exit status'debug1: Connecting to 192.0.2.10 [192.0.2.10] port 22.
debug1: Connection established.
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u10
debug1: Server host key: ssh-ed25519 SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc
debug1: Host '192.0.2.10' is known and matches the ED25519 host key.
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /root/.ssh/id_ed25519 ED25519 SHA256:4bN7qT1xW9cK3mR6yH0sD2fL8vZ5aJ1eP7uG3oX4iQs explicit
Authenticated to 192.0.2.10 ([192.0.2.10]:22) using "publickey".
debug1: Exit status 0La riga Connecting to è il tentativo di connessione, e le righe Server host key e is known and matches sono il controllo della chiave host. Nella riga Offering public key è stata proposta la chiave, e nella riga Authenticated to l'autenticazione con chiave si è conclusa. Se si blocca all'autenticazione, controlla prima che il file di chiave voluto compaia nella riga Offering public key.
Aggiungendo -C, il valore compression della riga kex è passato da none a zlib@openssh.com.
ssh -v -C user@192.0.2.10 true 2>&1 | grep -E 'compression'debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: Enabling compression at level 6.-X è l'opzione che porta sul tuo computer le finestre dei programmi GUI del server remoto. Eseguita su un server AlmaLinux senza schermo, ha prodotto una riga debug1 che indica che DISPLAY non c'è.
ssh -v -X user@192.0.2.10 true 2>&1 | grep DISPLAYdebug1: X11 forwarding requested but DISPLAY not setDISPLAY è la variabile d'ambiente che stabilisce dove mostrare le finestre GUI. Per questo -X si usa quando ci si collega da un computer con un desktop.
🔲 Simulatore del comando SSH
Nel simulatore qui sotto puoi collegarti con ssh a un server virtuale e provare tu stesso opzioni, comandi remoti e ssh -G digitandoli.
🔢 FAQ & contenuti consigliati
SSH
SSH su Linux: definizione e impostazioni di base
Articolo che riassume le origini di SSH, nato per sostituire Telnet non cifrato, la porta predefinita 22, l'autenticazione con chiave e l'installazione.
Sicurezza
Vulnerabilità di OpenSSH CVE-2024-6387: blocco temporaneo e applicazione della patch
Articolo su come la vulnerabilità di OpenSSH regreSSHion sfrutta il segnale di allarme del tempo di attesa del login, e sull'ordine in cui abbiamo applicato prima un blocco temporaneo e poi la patch.
Cloudways
Come accedere a Cloudways in SFTP & SSH: impostazioni di FileZilla, registrazione delle chiavi SSH e whitelist IP
Articolo su come registrare una chiave SSH su un server cloud gestito, mettere in whitelist l'IP che si collega e poi collegarsi con ssh e FileZilla.
ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.