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

Der Server hat Ihren Tunnel abgelehnt, weil seine Konfiguration ihn verbietet. Ihre Anmeldung ist in Ordnung, das Ziel wurde nie kontaktiert. Suchen Sie in der sshd_config, auch in Match-Blöcken, nach AllowTcpForwarding no, DisableForwarding yes oder einer PermitOpen-Liste, oder in der authorized_keys nach restrict, no-port-forwarding oder permitopen bei Ihrem Schlüssel. Ändern kann das nur ein Administrator dieses Servers.

Sie brauchen Host und Port für die Anfrage an den Administrator? Wardterm zeigt beides bei jedem gespeicherten Tunnel. Zeigen

Aktualisiert am . Jede Einstellung in der Tabelle wurde auf einem Wegwerf-Server mit OpenSSH 10.0 unter Debian 13 getestet, als Client diente OpenSSH 10.3 unter macOS.

Was Sie sehen

Die Sitzung startet normal. Die Meldung erscheint, wenn etwas den Tunnel benutzt, nicht beim Verbinden, und zwar in dem Terminal, in dem ssh läuft:

channel 3: open failed: administratively prohibited: open failed

Das Programm, das den Tunnel nutzt, scheitert getrennt davon mit eigener Meldung. Ein SSH-Client, der hindurchgeht, gibt zum Beispiel kex_exchange_identification: read: Connection reset by peer aus.

Verwandte Formen derselben Einstellungen:

BefehlAusgabe
ssh -L oder ssh -Dchannel 3: open failed: administratively prohibited: open failed
ssh -W oder ssh -Jchannel 0: open failed: administratively prohibited: open failed, danach stdio forwarding failed
ssh -RWarning: remote port forwarding failed for listen port 8080

Ein anderes Ende der Meldung bedeutet ein anderes Problem. open failed: connect failed: Connection refused heißt, die Weiterleitung war erlaubt, aber auf dem Zielhost und -port lauscht nichts. Korrigieren Sie dann das Ziel, nicht die Konfiguration.

Welche Einstellung das auslöst

WoEinstellungBlockiert
sshd_configAllowTcpForwarding no-L, -D, -W, -J und -R
sshd_configAllowTcpForwarding remote-L, -D, -W und -J
sshd_configAllowTcpForwarding local-R
sshd_configDisableForwarding yesJede Weiterleitung, überschreibt die anderen Einstellungen
sshd_configPermitOpen 127.0.0.1:5432-L zu jedem Ziel, das nicht in der Liste steht
sshd_configPermitListen 9000-R auf jedem Port, der nicht in der Liste steht
authorized_keysrestrict oder no-port-forwardingWeiterleitung bei Anmeldung mit diesem Schlüssel
authorized_keyspermitopen="127.0.0.1:5432"-L mit diesem Schlüssel zu jedem anderen Ziel

Was Schlüsseloptionen wie restrict und permitopen bewirken, steht Zeile für Zeile in die Datei authorized_keys erklärt.

Herausfinden, welche Einstellung bei Ihnen gilt

Dafür brauchen Sie Admin-Rechte auf dem Server. Fragen Sie sshd, was er auf Ihren Benutzer anwenden würde. Das einfache sshd -T ignoriert Match-Blöcke, geben Sie deshalb die Verbindungsdaten mit an. In einem Test zeigte die einfache Form yes, obwohl der echte Wert des Benutzers no war:

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

Sehen Sie sich auch die Optionen vor dem Schlüssel in der Datei dieses Benutzers an:

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

Das Log des Servers nennt das abgelehnte Ziel:

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

Beheben

Wenn es nicht Ihr Server ist, fragen Sie dessen Administrator. Die Sperre ist meist Absicht, denn ein Tunnel erlaubt einem Benutzer, interne Systeme von außen zu erreichen. Nennen Sie, welchen Host und Port Sie brauchen, damit nur genau das freigegeben werden kann.

Wenn es Ihr Server ist, bevorzugen Sie eine enge Regel, statt die Weiterleitung für alle einzuschalten. Setzen Sie dies ans Ende der sshd_config:

Match User name
  AllowTcpForwarding local
  PermitOpen 127.0.0.1:5432

Prüfen Sie dann die Konfiguration und laden Sie sie neu. Der Dienst heißt unter Debian und Ubuntu ssh und auf Red-Hat-artigen Systemen sshd:

sudo sshd -t && sudo systemctl reload ssh

Beachten Sie, dass bei den meisten Schlüsselwörtern sshd den ersten Wert verwendet, den er liest. Steht weiter oben eine Zeile AllowTcpForwarding no, bewirkt ein yes weiter unten nichts. Unter Debian und Ubuntu werden Dateien in /etc/ssh/sshd_config.d/ zuerst gelesen, schauen Sie also auch dort nach. Führen Sie nach der Änderung sshd -T erneut aus, um das Ergebnis zu sehen.

Bei einem eingeschränkten Schlüssel ändern Sie die Optionen in seiner Zeile in der authorized_keys. Das gilt ab der nächsten Anmeldung, ohne Neuladen. Ein Schlüssel mit restrict kann zum Beispiel einen einzelnen Tunnel zurückbekommen:

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

Siehe SSH-Schlüssel einschränken.

Fragen

Bedeutet administratively prohibited, dass Passwort oder Schlüssel falsch sind?

Nein. Die Anmeldung hat geklappt. Die Serverkonfiguration lehnt genau diese Weiterleitung ab, daher ändern nur ihre Einstellungen oder die Optionen Ihres Schlüssels das Ergebnis.

Wie erlaube ich Portweiterleitung nur für einen Benutzer?

Fügen Sie am Ende von sshd_config einen Block Match User name mit AllowTcpForwarding local und einer PermitOpen-Zeile für das Ziel ein, prüfen Sie mit sshd -t und laden Sie den Dienst neu.

Warum scheitert ssh -J mit administratively prohibited?

Ein Jump-Host muss TCP weiterleiten, um Ihre Verbindung durchzureichen. Hat er AllowTcpForwarding no oder remote, oder trägt Ihr Schlüssel restrict, scheitert die Verbindung mit -J genauso.

Quellen

Mehr zu Fehlermeldungen

Alle Anleitungen