Guide SSH
Risposte ai problemi che incontri lavorando sui server via SSH, con comandi da copiare. Sono scritte per OpenSSH, quindi quasi tutte valgono con qualsiasi client.
Messaggi di errore
Cosa vuol dire ogni messaggio e come risolvere.
- Tunnel SSH: "bind: Address already in use" e "remote port forwarding failed"
Come risolvere bind Address already in use e remote port forwarding failed nei tunnel SSH: trova cosa occupa la porta e fai fallire il tunnel con chiarezza.
- "channel 3: open failed: administratively prohibited: open failed"
channel open failed: administratively prohibited vuol dire che sshd o authorized_keys vietano l'inoltro. Controlla AllowTcpForwarding, PermitOpen e restrict.
- client_loop: send disconnect: Broken pipe: come evitare che SSH si disconnetta
Risolvi "client_loop: send disconnect: Broken pipe" e "packet_write_wait": imposta ServerAliveInterval, capisci i timeout del NAT e quando usare tmux.
- ssh: connect to host port 22: Connection refused, come risolvere
Cosa significa "ssh: connect to host port 22: Connection refused" e come trovare la causa: sshd fermo, porta sbagliata, ListenAddress o firewall.
- "kex_exchange_identification: read: Connection reset by peer"
kex_exchange_identification: Connection reset by peer o Connection closed by remote host. Controlla penalità, MaxStartups, TCP wrappers, firewall e tunnel.
- ssh: connect to host port 22: Operation timed out / Connection timed out, come risolvere
Perché SSH dice "Operation timed out" o "Connection timed out": firewall, security group, routing o indirizzo sbagliato, e come capire qual è la causa.
- "Could not open a connection to your authentication agent": come risolvere
Errore Could not open a connection to your authentication agent: come risolverlo con eval, un SSH_AUTH_SOCK da correggere o il servizio ssh-agent di Windows.
- "ssh: Could not resolve hostname": cause e come risolvere
Errore ssh: Could not resolve hostname, nodename nor servname provided o Name or service not known: come capire se è un refuso, un alias mancante o il DNS.
- Come fare il debug di una connessione SSH
Debug di SSH passo per passo: leggi l'output di ssh -v riga per riga, controlla le impostazioni reali con ssh -G e i motivi del server con sshd -d e sshd -T.
- "git@github.com: Permission denied (publickey)": come risolvere
Risolvi git@github.com: Permission denied (publickey) e Could not read from remote repository. Prova con ssh -T, poi controlla la chiave, l'agent e l'account.
- WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! Cosa fare
Cosa significa "REMOTE HOST IDENTIFICATION HAS CHANGED", come distinguere una reinstallazione da un attacco, verificare il nuovo fingerprint e usare ssh-keygen -R.
- "Host key verification failed" in SSH, negli script e in CI
Perché SSH stampa Host key verification failed, come distinguere un host sconosciuto da una chiave cambiata e come risolvere in sicurezza in script, cron e CI.
- Load key: "invalid format" o "error in libcrypto"
Risolvi Load key invalid format ed error in libcrypto: fine riga, newline finale mancante, chiave pubblica usata per errore, file PPK o segreto CI rovinato.
- Cos'è known_hosts e come si verifica l'impronta di un host SSH?
Cos'è il file SSH known_hosts, il suo formato e le voci con hash, come verificare l'impronta di un host, più ssh-keyscan, accept-new, UpdateHostKeys e SSHFP.
- SSH "no matching key exchange method found" o "no matching host key type found": come risolvere
Risolvi "no matching key exchange method found", "no matching host key type found" e "no matching cipher found" per un host vecchio, in sicurezza, con la config ssh.
- "sign_and_send_pubkey: no mutual signature supported": come risolvere
sign_and_send_pubkey: no mutual signature supported vuol dire che la tua chiave RSA richiede SHA-1 per un server vecchio. Verificalo e correggi solo quell'host.
- "ssh: connect to host port 22: No route to host"
ssh: connect to host port 22: No route to host. Distingui una macchina spenta da una regola del firewall o da una rotta rotta, con un comando per ogni causa.
- "Permission denied, please try again." con la password giusta
SSH dice Permission denied, please try again. Come capire se dipende da password, nome utente, regole sul login root, account bloccato o AllowUsers.
- "WARNING: connection is not using a post-quantum key exchange algorithm": cosa significa
OpenSSH 10.1 e successivi avvisano se la connessione non usa uno scambio di chiavi post-quantistico. Cosa significa, come controllare il server e come risolvere.
- "Pseudo-terminal will not be allocated because stdin is not a terminal": cosa significa e come risolvere
Perché SSH stampa Pseudo-terminal will not be allocated because stdin is not a terminal e quando usare -T, -t, -tt o un comando per farlo sparire.
- SFTP: "subsystem request failed on channel 0" e "Connection closed"
sftp o scp dice subsystem request failed on channel 0 e poi Connection closed. Al server manca la riga Subsystem sftp. Come verificare, risolvere e aggirare.
- Errore SSH "Too many authentication failures": come risolvere
Risolvi "Too many authentication failures" in SSH: l'agent offre troppe chiavi prima di quella giusta. Usa IdentitiesOnly e IdentityFile per ogni host.
- "Error opening terminal" e "unknown terminal type" via SSH: come risolvere
Risolvi Error opening terminal, 'xterm-256color': unknown terminal type e messaggi simili. Copia la voce terminfo sul server o imposta un TERM comune.
- WARNING: UNPROTECTED PRIVATE KEY FILE: come correggere i permessi
Risolvi l'errore SSH "UNPROTECTED PRIVATE KEY FILE" e "bad permissions" sulla chiave privata con chmod 600, più i controlli lato server su ~/.ssh e StrictModes.
Chiavi e accesso
Creare le chiavi, entrare senza password e risolvere gli errori di accesso.
- Il file authorized_keys spiegato
Come funziona il file SSH authorized_keys: formato, opzioni, permessi richiesti da sshd, AuthorizedKeysFile e quale riga vince se una chiave compare due volte.
- Come convertire una chiave .ppk in OpenSSH, e viceversa
Converti una chiave .ppk nel formato OpenSSH con un solo comando, e una chiave OpenSSH in .ppk. Comandi nei due sensi, passphrase e PPK versione 3.
- Come disabilitare l'accesso con password in SSH
Disattiva l'accesso SSH con password senza chiuderti fuori: file drop-in che annullano sshd_config, KbdInteractive, UsePAM, sshd -T e come ricaricare in sicurezza.
- Come usare una YubiKey o una chiave FIDO2 con SSH (ed25519-sk)
Crea una chiave SSH ed25519-sk su una YubiKey o chiave FIDO2: chiavi resident, verify-required, versione di server richiesta e il problema dell'ssh di macOS.
- Come generare una chiave SSH ed25519
Genera una chiave SSH ed25519 con ssh-keygen, proteggila con una passphrase, copiala su un server o su GitHub e prova l'accesso. Per macOS, Linux e Windows.
- Come aggiungere una chiave SSH a GitHub
Aggiungi una chiave SSH al tuo account GitHub: generala, incolla la chiave pubblica, controlla il fingerprint dell'host con ssh -T e passa un repo a SSH.
- Come risolvere "Permission denied (publickey)" in SSH
Errore SSH Permission denied (publickey), come risolverlo: vedi quale chiave offre ssh -v, leggi il log del server, installa la chiave o correggi i permessi.
- Come recuperare una chiave pubblica SSH dalla chiave privata
Hai perso il file .pub? Esegui ssh-keygen -y per ricavare la chiave pubblica dalla privata e verifica se un file .pub appartiene davvero a una chiave privata.
- Chiavi SSH RSA o ed25519: quale conviene usare?
Usa ed25519 per le nuove chiavi SSH, RSA solo dove serve. Livello di sicurezza, dimensioni, compatibilità e come raggiungere vecchi server, con comandi provati.
- Come aggiungere una chiave SSH a ssh-agent e al Portachiavi di macOS
Smetti di digitare la passphrase della chiave SSH su Mac: UseKeychain, AddKeysToAgent, ssh-add --apple-use-keychain, IdentitiesOnly e cosa succede al riavvio.
- Autenticazione con certificati SSH: come funziona
Configura i certificati SSH con ssh-keygen -s: una CA, TrustedUserCAKeys, principal, validità, certificati host, @cert-authority e revoca di un certificato.
- Come usare le stesse chiavi SSH su più computer
Usa SSH da portatile, fisso e telefono: una chiave per dispositivo o una chiave copiata con cura. Comandi, rischi e cosa fare se perdi un dispositivo.
Configurazione e tanti server
Collegamenti brevi da scrivere e facili da tenere in ordine.
- Come importare la config SSH in un gestore di configurazioni SSH
Preparare ~/.ssh/config all'import: elencare ogni host, anche dei file Include, controllarli con ssh -G, esportarli in CSV e portare chiavi e known_hosts.
- Come gestire molti server SSH
Tieni in ordine molti server SSH: nomi, pattern Host, Include per progetto, una chiave per scopo, un inventario, known_hosts con hash e quando serve Ansible.
- Come usare più account GitHub con SSH
Usa due account GitHub su un solo computer: una chiave ciascuno, alias Host in ~/.ssh/config, IdentitiesOnly e includeIf per l'email giusta in ogni cartella.
- Come salvare i comandi del terminale che usi spesso (snippet SSH)
Conservare i comandi che usi via SSH: cronologia più lunga, Ctrl-R con etichette, alias e funzioni, RemoteCommand per host e cosa non salvare mai.
- Il file di configurazione SSH, con esempi
Come funziona ~/.ssh/config, con esempi: pattern Host, perché vince il primo valore, Include, Match e ssh -G per vedere le impostazioni che ssh userà davvero.
- Multiplexing SSH con ControlMaster e ControlPersist
Riusa una connessione SSH per più sessioni con ControlMaster, ControlPath e ControlPersist. Verificala con -O check, chiudila con -O exit, conosci i limiti.
Tunnel e jump host
Raggiungere in sicurezza quello che sta dietro un server.
- Come mantenere attivo un tunnel SSH con autossh e systemd
Un tunnel SSH permanente con autossh e un'unità systemd con Restart=always, ServerAliveInterval ed ExitOnForwardFailure, più una chiave dedicata e limitata.
- Come collegarsi a PostgreSQL o MySQL tramite un tunnel SSH
Raggiungi un database PostgreSQL o MySQL privato con un tunnel SSH: comandi esatti, porte, indirizzi di bind, controlli TLS e un utente solo tunnel con PermitOpen.
- Jump host e bastion host: qual è la differenza?
Jump host e bastion host: cosa significano i due termini, come ProxyJump e ProxyCommand ci passano attraverso e cosa trasforma un jump host in un vero bastion.
- Come usare ProxyJump e un jump host in SSH
Raggiungi server privati tramite un jump host con ssh -J e ProxyJump: più salti, scp e rsync, perché è più sicuro dell'agent forwarding, ProxyCommand.
- Come creare un tunnel SSH inverso per un computer dietro NAT
Raggiungi una macchina dietro NAT lanciando ssh -R verso un server con indirizzo pubblico. Esempi provati, GatewayPorts e come tenere il tunnel privato.
- Come configurare un bastion host SSH
Configura un bastion SSH che inoltra solo verso server scelti: sshd con Match, AllowTcpForwarding, PermitOpen e ForceCommand, poi ProxyJump e log.
- Come usare SSH come proxy SOCKS
Trasforma un server SSH in un proxy SOCKS con ssh -D 1080. Provalo con curl, configura il browser, evita le fughe DNS e tieni la porta privata.
- Gestire i tunnel SSH: salvare, avviare e fermare i port forwarding
Salva i tunnel SSH in ~/.ssh/config con LocalForward, RemoteForward e DynamicForward, avviali con ssh -f -N e fermali in modo pulito con ssh -O exit.
- Tunnel SSH spiegati: port forwarding locale, remoto e dinamico
Port forwarding SSH con esempi provati: tunnel locale -L, remoto -R e dinamico -D, più porte insieme, jump host, ssh config, GatewayPorts ed errori comuni.
- Come usare SSH su un server senza IP pubblico o dietro CGNAT
Quattro modi per raggiungere una macchina senza IPv4 pubblico o dietro CGNAT: VPN o rete overlay, tunnel inverso, IPv6 e inoltro di porta sul router.
Mettere in sicurezza un server
Ridurre quello che un attaccante può tentare e i danni di un errore.
- Rischi dell'agent forwarding SSH e cosa usare al suo posto
Cosa espone davvero ssh -A: root sull'host remoto può usare il socket del tuo agent finché sei connesso. Come ProxyJump e ssh-add -c riducono il rischio.
- Come evitare di eseguire comandi sul server sbagliato
Rendi riconoscibile la produzione con prompt rosso, barra tmux e colore del terminale. Più protezioni per rm, dry run, bracketed paste e i loro limiti.
- Come cambiare la porta SSH senza chiudersi fuori
Cambia la porta SSH nell'ordine giusto: firewall, SELinux, sshd_config, ssh.socket su Ubuntu, poi prova prima di chiudere la porta 22. E cosa protegge davvero.
- Come controllare i tentativi di login SSH su Linux
Vedi i login SSH riusciti e falliti con journalctl, auth.log, /var/log/secure, last, lastb e who. Cosa significa ogni riga di log e quali devono preoccuparti.
- Come disabilitare il login di root via SSH
Imposta PermitRootLogin no senza chiuderti fuori: cosa fa ogni valore, perché un file drop-in può annullare la modifica e come controllare con sshd -T.
- Come configurare fail2ban per SSH
Configura fail2ban per SSH: jail.local, jail sshd, bantime, findtime, maxretry, backend systemd, controllo dello stato, unban e cosa non riesce a fermare.
- Come rendere più sicuro sshd_config: una checklist che puoi provare
Irrobustisci sshd_config passo per passo: root, password, AllowUsers, inoltri e algoritmi, con i controlli sshd -t e sshd -T contro il rischio di restare fuori.
- Come evitare un rm -rf per errore sui server Linux
Proteggere un server Linux da un rm -rf per errore: rm -I e --preserve-root=all, safe-rm, controlli negli script, chattr +i, un cestino, snapshot e recupero.
- Come limitare una chiave SSH a un solo comando o indirizzo
Limita una chiave SSH con restrict, command=, from= e permitopen= in authorized_keys. Con SSH_ORIGINAL_COMMAND, uno script wrapper e i limiti che abbiamo trovato.
- Come revocare una chiave SSH quando una persona se ne va
Trova tramite fingerprint la chiave SSH di chi se ne va, rimuovila, bloccala con RevokedKeys e una KRL, chiudi le sessioni e usa certificati a breve durata.
- Come condividere l'accesso SSH senza condividere la chiave privata
Dai accesso SSH ai colleghi nel modo giusto: un account o una chiave per persona, scadenze, certificati brevi, revoca pulita e terminale condiviso con tmux.
- Come aggiungere l'autenticazione a due fattori a SSH con TOTP
Richiedi chiave SSH e codice TOTP con libpam-google-authenticator e AuthenticationMethods su Debian o Ubuntu, e tieni una via di rientro se qualcosa va storto.
- Come usare sudo via SSH senza esporre la password
Una password digitata al prompt di sudo con ssh -t è cifrata. Ciò che trapela è echo pass | sudo -S. Come usare sudo da remoto in sicurezza, con NOPASSWD.
- Come consentire SSH in ufw senza chiuderti fuori
Consenti SSH in ufw prima di attivarlo: allow, limit, una porta personalizzata, un solo IP e una rete di sicurezza a tempo per non perdere l'accesso al server.
SSH su ogni sistema
Attivare e configurare SSH sul sistema che hai.
- Come creare un utente con accesso SSH e sudo
Crea un utente Linux che entra con una chiave SSH e usa sudo: adduser, il gruppo sudo o wheel e i permessi esatti per .ssh e authorized_keys.
- Come abilitare SSH su un Mac
Attiva il Login remoto su macOS da Impostazioni di Sistema o con systemsetup, limita chi può entrare e risolvi l'errore di Accesso completo al disco di systemsetup.
- Come abilitare SSH su un Raspberry Pi
Attiva SSH su un Raspberry Pi con Imager, raspi-config, il desktop o un file sulla scheda SD, con la configurazione headless e come trovare l'indirizzo.
- Come abilitare SSH su Ubuntu
Installa openssh-server su Ubuntu, avvialo, apri il firewall e prova il login. Spiega perché ssh.service può sembrare inattivo mentre SSH funziona.
- Come generare una chiave SSH su Windows
Genera una chiave SSH su Windows con ssh-keygen in PowerShell, avvia il servizio ssh-agent per digitare la passphrase una volta sola e copia la chiave pubblica.
- Come installare OpenSSH Server su Windows 11
Installa OpenSSH Server su Windows 11 con PowerShell: Add-WindowsCapability, il servizio sshd, la regola del firewall e administrators_authorized_keys.
- Console seriale su Mac con screen e /dev/tty.usbserial
Aprire una console seriale su Mac: trovare la porta /dev/cu.usbserial, collegarsi con screen o cu alla velocità giusta, impostare parità e flusso, uscire da screen.
- ssh-copy-id su Windows: il comando PowerShell che funziona
OpenSSH per Windows non ha ssh-copy-id. Questa riga PowerShell fa lo stesso lavoro per i server Linux, più un metodo separato per i server Windows.
- Come entrare con SSH in un container Docker
Aprire una shell in un container Docker con docker exec, in locale o su un server remoto via SSH. Come risolvere gli errori comuni e quando serve sshd.
- telnet: command not found su Mac? Come usare Telnet su macOS
Perché macOS non ha il comando telnet, come provare una porta con nc, come installare telnet con Homebrew e quando switch e router ne hanno ancora bisogno.
Sessioni e tmux
Non perdere il lavoro e tenere sotto controllo le sessioni.
- Come mantenere attiva una sessione SSH dopo la disconnessione con tmux
Esegui tmux sul server e il tuo lavoro sopravvive a una connessione SSH caduta. Avvia, stacca, riattacca, elenca e chiudi sessioni, più nohup e systemd-run.
- Mosh o SSH: qual è la differenza
Mosh mantiene vivo il terminale quando la rete cambia, sulle porte UDP da 60000 a 61000. Come si distingue da SSH, come installarlo e cosa non può fare.
- Come eseguire un comando su più server via SSH
Eseguire un comando su più server via SSH: un ciclo, lavori in parallelo con xargs e GNU parallel, parallel-ssh, tmux synchronize-panes e un rilascio sicuro.
- Come eseguire un comando su un server via SSH
Esegui comandi remoti con ssh user@server 'comando': apici, heredoc, codici di uscita, perché ssh in un ciclo while si ferma dopo un host, -n e -t.
- Come chiudere una sessione SSH bloccata: le sequenze di escape
Premi Invio, poi ~ e . per chiudere una sessione SSH bloccata. Tutte le sequenze di escape, ~C, ~^Z, le sessioni annidate e come cambiare il carattere.
- Come registrare una sessione SSH su Linux
Registra una sessione SSH e riguardala: script e scriptreplay, asciinema, tlog sul server e i log di sudo. E come tenere le password fuori dai file.
- Cheat sheet di tmux: comandi e tasti
I comandi e i tasti di tmux che usi davvero: sessioni, finestre, pannelli, modalità copia, script e configurazione. Tutto provato su tmux 3.5a.
- tmux o screen: qual è la differenza
tmux e GNU screen mantengono entrambi attive le sessioni del terminale dopo la disconnessione. Confronto di tasti, pannelli, script e porte seriali, affiancati.
- X11 forwarding via SSH: come usare ssh -X e -Y
X11 forwarding via SSH: apri programmi grafici Linux con ssh -X. Differenza tra -X e -Y, cosa serve al server, XQuartz su Mac, errori comuni e rischi.
SFTP e trasferimento file
Spostare file via SSH.
- Come modificare file remoti via SSH
Modificare un file su un server via SSH: nano o vim nella sessione, sudoedit, scp in andata e ritorno, vim scp://, sshfs o un editor con modalità remota.
- Come usare rsync su SSH
Sincronizza cartelle con rsync su SSH: -avz, la regola dello slash finale, una porta diversa con -e, la ripresa con --partial e --dry-run prima di --delete.
- Esempi di scp: copiare file e cartelle via SSH
Esempi di scp provati: caricare, scaricare, copiare una cartella con -r, usare un'altra porta con -P, copiare tra due server con -3 e quando serve l'opzione -O.
- scp, SFTP o rsync: differenze e quale usare
Usa scp per una copia veloce, SFTP per esplorare o riprendere, rsync per sincronizzare cartelle e inviare solo le modifiche. Esempi, slash finale e porta.
- Comandi sftp: get, put, ls, lcd e modalità batch
I comandi sftp che servono, provati: connessione, get, put, ls, lcd, ripresa con reget e script con la modalità batch -b, che richiede il login con chiave.
- Come montare una cartella remota via SSH con sshfs
Monta una cartella del server come se fosse locale con sshfs. Comandi per montare e smontare, reconnect e altre opzioni, cosa fare se si rompe e macFUSE su Mac.
SSH dal telefono
Cosa serve per lavorare su un server dal telefono.
- Come trasferire file su un server con SFTP da iPhone
Trasferire file da iPhone a un server via SFTP: perché l'app File non basta, cosa cercare in un'app e come creare un utente solo sftp con chroot.
- Come usare SSH da un telefono Android
Cosa serve per usare SSH da Android: come valutare un client, le chiavi sul telefono, perché le sessioni in background muoiono e i comandi OpenSSH sul telefono.
- Come usare SSH da un iPhone
Cosa serve per usare SSH da un iPhone: un server raggiungibile, una chiave creata per il telefono e tmux, perché iOS sospende le app e la connessione cade.
Vault cifrati
Come funziona la cifratura e cosa protegge.
- Argon2id spiegato: cosa significano m, t e p e quali valori scegliere
Argon2id fa costare memoria a ogni tentativo di password. Cosa sono m, t e p, i valori di RFC 9106 e OWASP, perché batte PBKDF2 sulle GPU, con esempi da eseguire.
- Cosa significa end to end per un vault di password?
End to end: il tuo dispositivo cifra il vault con chiavi che il server non ha. Cosa vede ancora il server, cosa resta esposto e cosa chiedere a un fornitore.
- Gestore di password SSH: come conservare le password SSH in modo sicuro
Dove tenere le password SSH: prima le chiavi, i rischi di sshpass -p, il Portachiavi di macOS e secret-tool per quelle che restano, e cosa deve fare un gestore.