Wenn ich diesen SSH-Tunnel öffne:
ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983
Ich erhalte diesen Fehler, wenn ich versuche, auf den HTTP-Server zuzugreifen, der auf localhost ausgeführt wird: 8984:
channel 1: open failed: administratively prohibited: open failed
Was bedeutet dieser Fehler und auf welchem Computer können Sie das Problem beheben?
remote
in meinem Fall " Hostname kann nicht aufgelöst werden " bedeutet.Antworten:
Die obige Meldung bezieht sich darauf, dass Ihr SSH-Server die Anfrage Ihres SSH-Clients zum Öffnen eines Seitenkanals ablehnt. Dies kommt in der Regel aus
-D
,-L
oder-w
als getrennte Kanäle in dem SSH Strom über die übermittelten Daten zur Fähre erforderlich.Da Sie
-L
(auch für-D
) verwenden, gibt es zwei in Frage kommende Optionen, die Ihren SSH-Server veranlassen, diese Anfrage abzulehnen:AllowTcpForwarding
(wie Steve Buzonas erwähnte)PermitOpen
Diese Optionen finden Sie in
/etc/ssh/sshd_config
. Sie sollten sicherstellen, dass:AllowTCPForwarding
ist entweder nicht vorhanden, ist auskommentiert oder auf gesetztyes
PermitOpen
ist entweder nicht vorhanden, auskommentiert oder aufany
[1] gesetztWenn Sie einen SSH-Schlüssel zum Herstellen einer Verbindung verwenden, sollten Sie außerdem überprüfen, ob der Ihrem SSH-Schlüssel entsprechende Eintrag
~/.ssh/authorized_keys
keine Anweisungenno-port-forwarding
oder enthältpermitopen
[2].PermitTunnel
Wenn Sie versuchen, die Option -w zu verwenden , ist diese Option für Ihren Befehl nicht relevant, aber auch für dieses Thema nicht relevant .[1] Vollständige Syntax in der
sshd_config(5)
Manpage.[2] Vollständige Syntax in der
authorized_keys(5)
Manpage.quelle
lxc.cgroup.devices.allow = c 10:200 rwm
um Ihre Container config, und stellen Sie sicher , dass , wenn/dev/net/tun
nicht vorhanden ist , wirdmknod /dev/net/tun c 10 200; chmod 666 /dev/net/tun
beim Booten in den Behälter geleitet wird.AllowTcpForwarding
ermöglicht es Ihnen, TCP-Ports über SSH weiterzuleiten, was der-L 0.0.0.0:8984:remote:8983
Parameter anfordert. Wenn aufAllowTcpForwarding
gesetztno
, lehnt SSH die Portweiterleitungsanforderung ab, sodass dieser Fehler angezeigt wird.AllowTCPForwarding
bis zu bearbeitenAllowTcpForwarding
, aber SE möchte, dass mindestens 6 Zeichen geändert werden. Ich stelle nur fest, dass der richtige Fall dieTcp
Version ist, die beim ersten Mal richtig verwendet wurde.In einem sehr seltsamen Fall trat dieser Fehler auch beim Erstellen eines lokalen Tunnels auf. Mein Befehl lautete ungefähr so:
Das Problem bestand darin, dass auf dem Remote-Host
/etc/hosts
kein Eintrag für "localhost" vorhanden war, sodass der SSH-Server nicht wusste, wie der Tunnel eingerichtet werden sollte. Eine sehr unfreundliche Fehlermeldung für diesen Fall; froh, dass ich es endlich herausgefunden habe.Die Lektion: Stellen Sie sicher, dass der Ziel-Hostname Ihres Tunnels vom Remote-Host entweder über DNS oder auflösbar ist
/etc/hosts
.quelle
user@remote
) und richtet dann vom fernen Ende aus Tunnel zu den aufgeführten Zielhosts ein (dies ist im obigen Befehl der Falllocalhost
). Dabei wird das Auflösungsschema für Hostnamen auf dem Remote- Host verwendet. Wenn sich der Computer, auf dem Sie SSH installiert haben, nicht auflösen lässtlocalhost
, wird diese Fehlermeldung angezeigt .Mindestens eine Antwort ist, dass die Maschine "remote" mit ssh aus irgendeinem Grund nicht erreichbar ist. Die Fehlermeldung ist einfach nur absurd.
quelle
Wenn das Problem auf dem Server nicht behoben werden kann, wird dieser Fehler angezeigt. Ersetzen Sie durch eine IP-Adresse und prüfen Sie, ob das Problem dadurch behoben wird ...
(Im Grunde genommen gleiche Antwort wie die von Neil - aber ich fand sicher , dass das Problem auf meiner Seite zu sein) [hatte ich einen Alias für die Computernamen in meiner
~/.ssh/config
Datei - und der Remote - Computer wußte nichts von dieser Bezeichnung ...quelle
-D
angezeigt, wenn Sie (DynamicForward) als SOCKS-Proxy in einem Browser verwenden. Das heißt, der Versuch, auf eine Website zuzugreifen, die der Tunnel-Host nicht auflösen kann.Dieser Fehler tritt definitiv auf, wenn Sie ssh-Optionen verwenden
ControlPath
undControlMaster
eine Socket-Verbindung für mehrere Client-Verbindungen (von einem Client zu demselben Benutzer @ Server) freigeben. Wenn Sie zu viele öffnen (was auch immer das bedeutet, in meinem Fall ~ 20 Verbindungen), erhalten Sie diese Meldung. Wenn ich frühere Verbindungen schließe, öffne ich sie wieder bis zum Limit.quelle
MaxSession
aberMaxSessions
. Zwar gibt es einige Schutzmechanismen sind, nicht brechen Ihre SSH - Server - Konfiguration ..."Administrativ verboten" ist ein bestimmtes ICMP-Nachrichtenflag, das sich auf "Der Administrator möchte ausdrücklich, dass diese Verbindung blockiert wird" beschränkt.
Überprüfen Sie Ihre Iptables-Einstellungen.
quelle
ssh
hat keine Logik, um zu bestimmen, warum eine Verbindung fehlgeschlagen ist. Es wird lediglich davon ausgegangen, dass die Verbindung absichtlich blockiert wurde, wenn Sie versuchen, eine Verbindung herzustellen.Ein ähnliches Problem
Ein weiterer möglicher Hinweis
Ich hatte das gleiche Problem
~/.ssh/authorized_keys
mitpermitopen
.Da ich
autossh
einen Tunnel erstelle, benötige ich zwei Ports:Auf Kundenseite
Dies gab mir ein ähnliches Problem mit dem Überwachungsport:
Ich hatte diese Nachricht (nach 10 Minuten):
Auf der entfernten Seite
Meine
/var/log/auth.log
enthaltenen:Auf meiner
~/.ssh/authorized_keys
(entfernten) Seite hatte ich folgendes:Wie man es löst
Ich habe das gelöst, indem ich
localhost
Instanzen ersetzt habe durch127.0.0.1
:Es scheint, dass SSH nicht versteht, dass dies
localhost
eine Verknüpfung ist127.0.0.1
, daher die Nachricht inauth.log
und die administrativ verbotene Nachricht.Was ich hier verstehe ist, dass administrativ "aufgrund einer bestimmten Konfiguration auf der Serverseite" bedeutet.
quelle
Dies geschieht auch , wenn
/etc/sshd_config
hateinstellen. Aktivieren Sie diese Option,
yes
um die TCP-Weiterleitung zuzulassen.quelle
In meinem Fall musste ich ersetzen
localhost
durch127.0.0.1
:damit es funktioniert.
Ich habe versucht,
rdesktop -L localhost:1234
den Anweisungen von Amazon zum Herstellen einer Verbindung zu AWS EC2 über SSH-Tunneling zu folgen . Ich hatte versucht zu ändern/etc/ssh/sshd_config
(sowohl Client als auch Server führen Ubuntu 16.04 LTS aus), je nach der am höchsten bewerteten Antwort. Ich habe auch überprüft, dass dies auf beiden Seiten der Falllocalhost
ist/etc/hosts
.Nichts hat funktioniert, bis ich den
ssh
Befehl selbst geändert habe:quelle
Einige Schritte zur Fehlerbehebung sind erforderlich, um eine endgültige Antwort zu finden:
quelle
Ich habe diesen Fehler einmal erhalten, weil ich die Fernbedienung in den -L-Parameter gestellt habe. Auch die 0.0.0.0 ist überflüssig. Sie können sie mit denselben Ergebnissen weglassen, und ich denke, Sie sollten die -g hinzufügen, damit sie funktioniert.
Dies ist die Linie, die ich zum Tunneln benutze:
ssh -L 8983:locahost:8984 user@remote -4 -g -N
quelle
Dies kann auch dadurch verursacht werden, dass keine Bindung zum Port auf der lokalen Seite möglich ist.
Dieser Befehl versucht, einen Überwachungsport 1234 auf dem lokalen Computer zu binden, der einem Dienst auf Port 5678 auf einem Remotecomputer zugeordnet ist.
Wenn Port 1234 auf dem lokalen Computer bereits von einem anderen Prozess verwendet wird (möglicherweise eine ssh -f-Sitzung im Hintergrund), kann ssh diesen Port nicht überwachen, und der Tunnel schlägt fehl.
Das Problem ist, dass diese Fehlermeldung mehrere Bedeutungen haben kann und "administrativ verboten" manchmal die falsche Vorstellung vermittelt. Überprüfen Sie also zusätzlich zur Überprüfung von DNS, Firewalls zwischen lokal und remote und sshd_config, ob der lokale Port bereits verwendet wird. Verwenden
Möglicherweise benötigen Sie sudo, damit lsof Prozesse auflistet, die anderen Benutzern gehören. Dann können Sie verwenden
herauszufinden, was dieser Prozess ist.
Um dies alles in einem Befehl zu bekommen:
quelle
Ich hatte die gleiche Nachricht beim Versuch zu tunneln. Es gab ein Problem mit dem DNS-Server auf der Remote-Seite. Das Problem wurde gelöst, als es wieder funktionierte.
quelle
Ich bin sehr überrascht, dass niemand erwähnt hat, dass dies ein DNS-Problem sein könnte.
Dies wird möglicherweise angezeigt, wenn
remote
es nicht auflösbar ist oder Sie eine unbekannte Syntax eingegeben haben, wie hier, wo ichuser@
der Port-Forward-Logik ein hinzugefügt habe (was nicht funktioniert).quelle
In meinem Fall lag das Problem daran, dass ein Tunnel ohne Shell-Zugriff angefordert wurde, während der Server eine Kennwortänderung für mein Konto erzwingen wollte. Aufgrund des Fehlens einer Shell konnte ich das nicht sehen und erhielt nur den Fehler
Meine Tunnelkonfiguration war wie folgt:
Der Fehler wurde beim Anmelden direkt am Server angezeigt (ohne -N -f):
Ich habe das Problem behoben, indem ich mich mit Shell-Zugriff angemeldet und das Passwort geändert habe. Dann könnte ich einfach wieder Tunnel ohne Shell-Zugang benutzen.
quelle
Ich hatte dieses Problem beim Versuch, eine Verbindung über SSH mit einem Benutzer herzustellen, der nur über SFTP eine Verbindung herstellen durfte.
Dies war zum Beispiel im Server
/etc/ssh/sshd_config
:In diesem Fall müssen Sie zur Verwendung von SSH entweder den Benutzer aus der entsprechenden
sftponly
Gruppe entfernen oder eine Verbindung mit einem Benutzer herstellen, der nicht auf SFTP beschränkt ist.quelle
Überprüfen Sie, ob
/etc/resolv.conf
auf dem Server, zu dem Sie gehenssh
, noch etwas frei ist. Ich habe mehrmals festgestellt, dass dies mit einer leeren/etc/resolv.conf
Datei zusammenhängtWenn Sie kein root-Benutzer sind, können Sie den Server einfach überprüfen, indem Sie some
ping
odertelnet
(80) auf einem öffentlichen Hostnamen versuchen , dh:Nach dem Hinzufügen von Nameserver-Einträgen zu
/etc/resolv.conf
:Sie sollten jedoch auch überprüfen, warum
/etc/resolv.conf
leer war (dies wird normalerweise vom DHCP-Client auf dem Server mit Nameserver-Einträgen gefüllt, falls zutreffend).quelle
Ich habe die gleiche Nachricht erhalten, als SSH auf Debian umgestellt hat. Es stellte sich heraus, dass das Remote-System keinen freien Speicherplatz hatte. Nachdem Speicherplatz freigegeben und der Tunnel neu gestartet wurde, begann er zu arbeiten.
quelle
Ich habe diesen Fehler auf Cygwin gesehen und das sollte auch für Linux gelten und hat für mich funktioniert. In meinem Fall hatte ich ssh -ND *: 1234 [email protected] ausgeführt, und als ich einen Browser mit diesem Comp-Socks-Server verband, wurde dieser durchsucht, aber auf dem Comp, auf dem ich den Befehl ssh ausgeführt habe, wurde dieser Fehler angezeigt die Konsole bei jeder Anfrage - für mindestens eine Site, obwohl der Browser sie über den Proxy abgerufen hat oder zumindest in dem Maße schien, als ich das Hauptalter sah. Durch diese Änderung wurde jedoch die fehlgeschlagene Nachricht entfernt
http://linuxindetails.wordpress.com/2010/02/18/channel-3-open-failed-administrativ-verboten-open-failed/
quelle
ACCEPT
.AllowTCPForwarding
Der Kommentar, über den Sie sprechen,# To disable tunneled clear text
bezieht sich aufPasswordAuthentication
die Einstellung "Nein". Hierbei handelt es sich umPermitTunnel
eine Einstellung, mit der Layer 2- oder Layer 3-Netzwerktunnel über "Tun / Tap" zugelassen werden. Die Standardeinstellung lautet "Nein". Die Optionen L, R und D verwenden die TCP-Weiterleitung und kein Gerät zum Tunneln.Ein weiteres Szenario ist, dass der Dienst, auf den Sie zugreifen möchten, nicht ausgeführt wird. Ich bin neulich auf dieses Problem gestoßen, nur um mich daran zu erinnern, dass die httpd-Instanz, mit der ich mich verbinden wollte, gestoppt wurde.
Ihre Schritte zur Lösung des Problems wären, mit dem einfachsten zu beginnen, nämlich zu dem anderen Computer zu gehen und zu prüfen, ob Sie eine lokale Verbindung herstellen und sich dann wieder auf Ihren Clientcomputer hinarbeiten können. Zumindest können Sie so herausfinden, an welchem Punkt die Kommunikation nicht stattfindet. Sie können auch andere Ansätze wählen, aber diese haben bei mir funktioniert.
quelle
Überprüfen Sie Ihren Router auf DNS-Rebinding- Schutz. Auf meinem Router (pfsense) ist der DNS-Rebinding-Schutz standardmäßig aktiviert. Es verursachte den Fehler "Kanal offen: fehlgeschlagen, administrativ verboten: Öffnen fehlgeschlagen" mit SSH
quelle
Ich hatte das gleiche Problem und mir wurde klar, dass es sich um DNS handelte. Der Datenverkehr wird getunnelt, aber die DNS-Anforderungsnr. Versuchen Sie, die DNS-Hosts-Datei manuell zu bearbeiten und den Dienst hinzuzufügen, auf den Sie zugreifen möchten.
quelle
Mein Fall:
quelle
Ich habe diesen Fehler beim Schreiben dieses Eintrags in meinem Blog erhalten :
/etc/ssh/sshd_config
hatte so etwas wie:Aber
~/.ssh/config
hatte:Beachten Sie den Unterschied in Fall (Großschreibung ) zwischen SSHBeyondRemote.server.com:22 und sshbeyondremote.server.com:22 .
Nachdem ich den Fall behoben hatte, sah ich das Problem nicht mehr.
Ich habe benutzt:
Version des OpenSSH-Clients:
Version des OpenSSH-Servers:
quelle
Anderer Grund für die Namensauflösung: Meine / etc / hosts hatte eine falsche IP-Adresse für den Namen des Servers (nicht für localhost), wie folgt:
Die konfigurierte Server-IP (und der mit den Befehlen host / dig aufgelöste DNS-Name) lautete jedoch 192.168.2.47. Ein einfacher Tippfehler, der durch eine vorherige IP-Neukonfiguration verursacht wurde. Nach dem Reparieren von / etc / hosts funktionierte die Tunnelverbindung einwandfrei:
Es ist seltsam, dass die reale IP den Fehler verursachte, als ich die localhost-Literal-IP für den Tunnel verwendete. Distribution: Ubuntu 16.04 LTS.
quelle
Der Grund, warum ich diese Nachricht hatte, ist nicht der häufigste, aber es lohnt sich zu erwähnen. Ich hatte per Skript eine Liste von Tunneln erzeugt und um eine Spaltenpräsentation zu gewährleisten, hatte ich jedes letzte Byte auf zwei Bytes gedruckt. Wenn ich versuchte, die Tunnelweiterleitung auf 192.168.66.08 zu öffnen, schlug dies immer fehl, da '08' von gethostbyaddr als ungültige Oktalzahl interpretiert wird :)
quelle
Es scheint, dass es viele mögliche Ursachen für diese Nachricht gibt. In meinem Fall konnte ich nicht auf die Fernbedienung zugreifen, da ich die Schlüsseldatei nicht korrekt angegeben hatte.
Die
-L
Option fügt einen impliziten SSH-Sprung hinzu (effektiv unter Verwendung des expliziten SSH-Hosts als Bastion / Jump-Server). Es kann einfacher sein, dies zu debuggen, indem Sie den Sprung explizit ausführen und mit "proxycommand" eine Anmeldeshell für den Zielcomputer erstellen.Sobald dies funktioniert, können Sie den Port basierend auf dem Zielcomputer weiterleiten
localhost
(vorausgesetzt, er kann sich bei sich selbst anmelden):quelle