"channel 3: open failed: administratively prohibited: open failed"

Il server ha rifiutato il tuo tunnel perché la sua configurazione lo vieta. Il login è a posto e la destinazione non è mai stata contattata. Cerca AllowTcpForwarding no, DisableForwarding yes o un elenco PermitOpen in sshd_config, blocchi Match compresi, oppure restrict, no-port-forwarding o permitopen sulla tua chiave in authorized_keys. Solo un amministratore di quel server può cambiarlo.

Aggiornata il . Ogni impostazione della tabella è stata provata su un server OpenSSH 10.0 usa e getta su Debian 13, con OpenSSH 10.3 su macOS come client.

Cosa vedi

La sessione si apre normalmente. Il messaggio compare quando qualcosa usa il tunnel, non quando ti connetti, e compare nel terminale dove gira ssh:

channel 3: open failed: administratively prohibited: open failed

Il programma che usa il tunnel fallisce separatamente, con un suo messaggio. Un client SSH che passa dal tunnel, per esempio, stampa kex_exchange_identification: read: Connection reset by peer.

Forme correlate generate dalle stesse impostazioni:

Cosa hai eseguitoOutput
ssh -L o ssh -Dchannel 3: open failed: administratively prohibited: open failed
ssh -W o ssh -Jchannel 0: open failed: administratively prohibited: open failed, poi stdio forwarding failed
ssh -RWarning: remote port forwarding failed for listen port 8080

Un finale diverso indica un problema diverso. open failed: connect failed: Connection refused significa che l'inoltro era permesso, ma sull'host e sulla porta di destinazione non c'è nulla in ascolto. Correggi la destinazione, non la configurazione.

Quale impostazione lo causa

DoveImpostazioneBlocca
sshd_configAllowTcpForwarding no-L, -D, -W, -J e -R
sshd_configAllowTcpForwarding remote-L, -D, -W e -J
sshd_configAllowTcpForwarding local-R
sshd_configDisableForwarding yesOgni inoltro, prevalendo sulle altre impostazioni
sshd_configPermitOpen 127.0.0.1:5432-L verso qualsiasi destinazione non in elenco
sshd_configPermitListen 9000-R su qualsiasi porta non in elenco
authorized_keysrestrict o no-port-forwardingL'inoltro quando accedi con quella chiave
authorized_keyspermitopen="127.0.0.1:5432"-L con quella chiave verso qualsiasi altra destinazione

Le opzioni delle chiavi come restrict e permitopen sono spiegate riga per riga in il file authorized_keys spiegato.

Trovare quale si applica a te

Servono i diritti di amministratore sul server. Chiedi a sshd cosa applicherebbe al tuo utente. Il semplice sshd -T ignora i blocchi Match, quindi includi i dettagli della connessione. In una prova, la forma semplice indicava yes mentre il valore reale dell'utente era no:

sudo sshd -T -C user=name,host=server,addr=203.0.113.10 | grep -iE '^(allowtcpforwarding|disableforwarding|permitopen|permitlisten)'

Guarda anche le opzioni prima della chiave nel file di quell'utente:

sudo cut -c1-60 ~name/.ssh/authorized_keys

Il log del server indica la destinazione rifiutata:

refused local port forward: originator 127.0.0.1 port 65535, target 127.0.0.1 port 22

Come risolvere

Se il server non è tuo, chiedi all'amministratore. Il blocco di solito è voluto, perché un tunnel permette a un utente di raggiungere dall'esterno sistemi interni. Spiega quale host e quale porta ti servono, così potrà permettere solo quelli.

Se il server è tuo, preferisci una regola stretta ad abilitare l'inoltro per tutti. Metti questo in fondo a sshd_config:

Match User name
  AllowTcpForwarding local
  PermitOpen 127.0.0.1:5432

Poi verifica e ricarica. Il servizio si chiama ssh su Debian e Ubuntu e sshd sui sistemi in stile Red Hat:

sudo sshd -t && sudo systemctl reload ssh

Tieni presente che per la maggior parte delle parole chiave sshd usa il primo valore che legge. Se una riga in alto dice AllowTcpForwarding no, un yes più in basso non ha effetto. Su Debian e Ubuntu i file in /etc/ssh/sshd_config.d/ vengono letti per primi, quindi controlla anche lì. Esegui di nuovo sshd -T dopo la modifica per vedere il risultato.

Per una chiave con restrizioni, cambia le opzioni sulla sua riga in authorized_keys. Ha effetto al login successivo, senza ricaricare nulla. Per esempio, una chiave con restrict può riavere un solo tunnel:

restrict,port-forwarding,permitopen="127.0.0.1:5432" ssh-ed25519 AAAA... user@laptop

Vedi come limitare una chiave SSH.

Domande

Administratively prohibited vuol dire che password o chiave sono sbagliate?

No. L'accesso è riuscito. È la configurazione del server a rifiutare questo inoltro, quindi solo le sue impostazioni o le opzioni della tua chiave possono cambiare il risultato.

Come consento il port forwarding a un solo utente?

Aggiungi in fondo a sshd_config un blocco Match User nome con AllowTcpForwarding local e una riga PermitOpen per la destinazione, poi esegui sshd -t e ricarica il servizio.

Perché ssh -J fallisce con administratively prohibited?

Un jump host deve inoltrare TCP per far passare la tua connessione. Se ha AllowTcpForwarding no o remote, o la tua chiave ha restrict, la connessione con -J fallisce allo stesso modo.

Fonti

Altro in Messaggi di errore

Tutte le guide