Kiedy otwieram ten tunel ssh:
ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983
Otrzymuję ten błąd podczas próby uzyskania dostępu do serwera HTTP działającego na localhost: 8984:
channel 1: open failed: administratively prohibited: open failed
Co oznacza ten błąd i na jakim komputerze możesz rozwiązać problem?
remote
W moim przypadku oznacza to „Nie można rozwiązać nazwy hosta ”.Odpowiedzi:
Powyższy komunikat odnosi się do odrzucenia przez serwer SSH żądania klienta SSH dotyczącego otwarcia kanału bocznego. To zazwyczaj pochodzi z
-D
,-L
lub-w
jako oddzielne kanały w strumieniu SSH są wymagane do Promowego przekazane dane w poprzek.Ponieważ używasz
-L
(dotyczy również-D
), istnieją dwie opcje, które powodują, że serwer SSH odrzuca to żądanie:AllowTcpForwarding
(jak wspomniał Steve Buzonas)PermitOpen
Te opcje można znaleźć w
/etc/ssh/sshd_config
. Powinieneś upewnić się, że:AllowTCPForwarding
jest albo nieobecny, jest komentowany, albo ustawiony nayes
PermitOpen
nie jest obecny, jest skomentowany lub jest ustawiony naany
[1]Dodatkowo, jeśli używasz klucza SSH do połączenia, powinieneś sprawdzić, czy wpis odpowiadający Twojemu kluczowi SSH w
~/.ssh/authorized_keys
nie ma instrukcjino-port-forwarding
lubpermitopen
instrukcji [2].Opcja nie dotyczy konkretnego polecenia, ale jest również nieco związana z tym tematem,
PermitTunnel
jeśli próbujesz użyć opcji -w.[1] Pełna składnia na stronie
sshd_config(5)
podręcznika.[2] Pełna składnia na stronie
authorized_keys(5)
podręcznika.źródło
lxc.cgroup.devices.allow = c 10:200 rwm
do konfiguracji kontenera i upewnić się, że jeśli/dev/net/tun
nie istnieje,mknod /dev/net/tun c 10 200; chmod 666 /dev/net/tun
jest uruchamiany podczas startu systemu w pojemniku.AllowTcpForwarding
umożliwia przekazywanie portów TCP przez SSH, czego-L 0.0.0.0:8984:remote:8983
żąda parametr. JeśliAllowTcpForwarding
jest ustawiony nano
, SSH odrzuci żądanie przekierowania portów, powodując wyświetlenie tego błędu.AllowTCPForwarding
doAllowTcpForwarding
, ale SE chce zmienić co najmniej 6 znaków. Zwróćmy więc uwagę, że poprawna wielkość liter jestTcp
wersją zastosowaną za pierwszym razem.W bardzo dziwnym przypadku wystąpił również ten błąd podczas próby utworzenia lokalnego tunelu. Moje polecenie brzmiało mniej więcej tak:
Problem polegał na tym, że na zdalnym hoście
/etc/hosts
nie było wpisu „localhost”, więc serwer ssh nie wiedział, jak skonfigurować tunel. Bardzo nieprzyjazny komunikat o błędzie w tym przypadku; Cieszę się, że w końcu to rozgryzłem.Lekcja: upewnij się, że docelowa nazwa hosta twojego tunelu jest rozpoznawalna przez host zdalny za pośrednictwem DNS lub
/etc/hosts
.źródło
user@remote
), a następnie ze zdalnego końca konfiguruje tunele do wymienionych hostów docelowych (w powyższym poleceniu to jestlocalhost
). W tym celu wykorzystuje schemat rozpoznawania nazw hostów na hoście zdalnym . Więc jeśli komputer, do którego SSH nie mógł rozwiązać problemulocalhost
, pojawi się ten komunikat o błędzie.Przynajmniej jedna odpowiedź jest taka, że „zdalny” komputer jest nieosiągalny z ssh z jakiegoś powodu. Komunikat o błędzie jest po prostu absurdalny.
źródło
Jeśli „zdalnego” nie można rozwiązać na serwerze, pojawi się ten błąd. Zastąp adres IP i sprawdź, czy to rozwiąże problem ...
(Zasadniczo taka sama odpowiedź jak u Neila - ale z pewnością uznałem, że to jest mój problem) [Miałem w swoim
~/.ssh/config
pliku alias nazwy komputera - a maszyna zdalna nic nie wiedziała o tym aliasie ...źródło
-D
(DynamicForward) jako proxy SOCKS w przeglądarce. Tzn. Próba uzyskania dostępu do strony internetowej, której host tunelu nie może rozwiązać.Ten błąd ostatecznie pojawia się, gdy używasz opcji ssh
ControlPath
iControlMaster
do współużytkowania jednego połączenia gniazda do ponownego wykorzystania między kilkoma połączeniami klienta (od jednego klienta do tego samego użytkownika @ serwer). Otwarcie zbyt wielu (cokolwiek to znaczy, w moim przypadku ~ 20 połączeń) daje ten komunikat. Zamknięcie wszystkich poprzednich połączeń pozwala mi otworzyć nowsze, ponownie do limitu.źródło
MaxSession
aleMaxSessions
. Chociaż istnieją pewne zabezpieczenia, nie„administracyjnie zabroniony” to konkretna flaga komunikatu ICMP, która sprowadza się do „Administrator wyraźnie chce zablokować to połączenie”.
Sprawdź ustawienia iptables.
źródło
ssh
nie ma logiki określającej, dlaczego połączenie się nie powiodło, po prostu zakłada, że jeśli próbujesz się połączyć, to istnieje, a jeśli nie możesz się tam dostać, połączenie musi zostać celowo zablokowane.Podobny problem
Kolejny możliwy trop
Miałem ten sam problem
~/.ssh/authorized_keys
z używaniempermitopen
.Podczas
autossh
tworzenia tunelu potrzebuję dwóch portów:Po stronie klienta
Dało mi to podobny problem z portem monitorowania:
Miałem tę wiadomość (po 10 minutach):
Po drugiej stronie
Mój
/var/log/auth.log
zawierał:W mojej
~/.ssh/authorized_keys
(odległej stronie) miałem to:Jak to rozwiązać
Rozwiązałem ten problem, zastępując
localhost
instancje127.0.0.1
:Wydaje się, że SSH nie rozumie, że
localhost
jest to skrót do127.0.0.1
, stąd wiadomość wauth.log
i wiadomość zabroniona administracyjnie .Rozumiem tutaj, że administracyjnie oznacza „ze względu na określoną konfigurację po stronie serwera”.
źródło
Dzieje się tak również wtedy, gdy
/etc/sshd_config
mazestaw. Przełącz na,
yes
aby umożliwić przekazywanie TCP.źródło
W moim przypadku musiałem wymienić
localhost
ze127.0.0.1
w:aby działało.
Próbowałem postępować
rdesktop -L localhost:1234
zgodnie z instrukcjami Amazon dotyczącymi łączenia się z AWS EC2 przez tunelowanie SSH . Próbowałem zmienić/etc/ssh/sshd_config
(zarówno klient, jak i serwer uruchamiają Ubuntu 16.04 LTS) na najlepiej głosowaną odpowiedź. Sprawdziłem też, żelocalhost
jest/etc/hosts
po obu stronach.Nic nie działało, dopóki nie zmieniłem samego
ssh
polecenia na:źródło
Aby znaleźć ostateczną odpowiedź, potrzebne są działania związane z rozwiązywaniem problemów:
źródło
Raz dostałem ten błąd za umieszczenie pilota w parametrze -L, również 0.0.0.0 jest redundantne, można go pominąć z takimi samymi wynikami i myślę, że powinieneś dodać -g, aby działał.
Oto linia, której używam do tunelowania:
ssh -L 8983:locahost:8984 user@remote -4 -g -N
źródło
Może to być również spowodowane brakiem możliwości połączenia z portem po stronie lokalnej.
To polecenie próbuje powiązać nasłuchujący port 1234 na komputerze lokalnym, który odwzorowuje na usługę na porcie 5678 na komputerze zdalnym.
Jeśli port 1234 na komputerze lokalnym jest już używany przez inny proces (być może sesję ssh -f w tle), ssh nie będzie w stanie nasłuchiwać na tym porcie i tunel się nie powiedzie.
Problem polega na tym, że ten komunikat o błędzie może oznaczać dowolną z kilku rzeczy, a „zabronione administracyjnie” czasami daje zły pomysł. Dlatego oprócz sprawdzania DNS, zapór ogniowych między lokalnym a zdalnym oraz sshd_config, sprawdź, czy port lokalny jest już używany. Posługiwać się
aby dowiedzieć się, jaki proces działa na 1234. Może być potrzebne sudo, aby lsof wylistował procesy należące do innych użytkowników. Następnie możesz użyć
aby dowiedzieć się, czym jest ten proces.
Aby uzyskać to wszystko w jednym poleceniu:
źródło
Miałem tę samą wiadomość podczas próby tunelowania. Wystąpił problem z serwerem dns po stronie zdalnej. Problem został rozwiązany, gdy wrócił do pracy.
źródło
Jestem bardzo zaskoczony, że nikt nie wspomniał, że może to być problem z DNS.
Może to zostać przedstawione, jeśli
remote
nie da się go rozwiązać lub wprowadziłeś nieznaną składnię, tak jak zrobiłem to tutaj, gdzie dodałem auser@
do logiki przekierowania portów (która nie będzie działać).źródło
W moim przypadku problem polegał na żądaniu tunelu bez dostępu do powłoki, podczas gdy serwer chciał wymusić zmianę hasła na moim koncie. Z powodu braku powłoki nie mogłem tego zobaczyć i tylko otrzymałem błąd
Moja konfiguracja tunelu była następująca:
Błąd pokazywany podczas logowania bezpośrednio na serwer (bez opcji -N -f):
Rozwiązałem problem, logując się przy użyciu dostępu do powłoki i zmieniając hasło. Wtedy mógłbym po prostu użyć tuneli bez dostępu do powłoki.
źródło
Miałem ten problem, gdy próbowałem połączyć się przez SSH z użytkownikiem, który był upoważniony tylko do łączenia się za pomocą SFTP.
Na przykład było to na serwerze
/etc/ssh/sshd_config
:W takim przypadku, aby skorzystać z SSH, będziesz musiał albo usunąć użytkownika z równoważnej
sftponly
grupy, albo połączyć się przy użyciu użytkownika, który nie jest ograniczony do SFTP.źródło
Sprawdź, czy
/etc/resolv.conf
jest pusty na serwerze, na którym chceszssh
. Kilka razy stwierdziłem, że jest to związane z pustym/etc/resolv.conf
plikiemJeśli nie jest rootem, możesz po prostu sprawdzić na serwerze, próbując trochę
ping
lubtelnet
(80) na publicznej nazwie hosta, tj .:Po dodaniu rekordów serwera nazw do
/etc/resolv.conf
:Jednak powinieneś również sprawdzić, dlaczego
/etc/resolv.conf
był pusty (zwykle jest zapełniany rekordami serwera nazw przez klienta dhcp na serwerze, jeśli dotyczy).źródło
Otrzymywałem tę samą wiadomość podczas tunelowania SSH do Debiana. Okazało się, że zdalny system nie ma wolnego miejsca. Po zwolnieniu miejsca na dysku i ponownym uruchomieniu, tunel zaczął działać.
źródło
Widziałem ten błąd na cygwinie i powinno to dotyczyć również Linuksa i działało dla mnie. W moim przypadku zrobiłem ssh -ND *: 1234 uż[email protected] i kiedy podłączyłem przeglądarkę do tego serwera comp-socks, przeglądał, ale na komputerze, na którym uruchomiłem to polecenie ssh, ten błąd pojawił się na konsolę z każdym żądaniem - przynajmniej dla jednej strony, chociaż przeglądarka pobierała je przez proxy lub wydawało się, przynajmniej w stopniu, w jakim widziałem główny wiek. Ale dokonanie tej zmiany pozbyło się nieudanego komunikatu
http://linuxindetails.wordpress.com/2010/02/18/channel-3-open-failed-administratively-prohibited-open-failed/
źródło
ACCEPT
.AllowTCPForwarding
, że komentarz, o którym mówisz,# To disable tunneled clear text
dotyczyPasswordAuthentication
ustawienia braku,PermitTunnel
jest ustawieniem umożliwiającym tunele sieciowe warstwy 2 lub warstwy 3 poprzez tun / tap i domyślnie nie. Opcje L, R i D używają przekazywania TCP, a nie urządzenia do tunelowania.Innym scenariuszem jest to, że usługa, do której próbujesz uzyskać dostęp, nie jest uruchomiona. Natknąłem się na ten problem innego dnia tylko po to, by pamiętać, że instancja httpd, z którą próbowałem się połączyć, została zatrzymana.
Aby rozwiązać problem, zacznij od najprostszego, czyli przejścia do drugiego komputera i sprawdzenia, czy możesz połączyć się lokalnie, a następnie pracy z powrotem w kierunku komputera klienckiego. Pozwoli to przynajmniej ustalić, w którym momencie komunikacja się nie odbywa. Możesz zastosować inne podejście, ale to zadziałało dla mnie.
źródło
Sprawdź, czy router nie ma ochrony przed ponownym połączeniem DNS Mój router (pfsense) ma domyślnie włączoną ochronę ponownego wiązania DNS. Powodował błąd „kanał otwarty: nieudany administracyjnie zabroniony: błąd otwarcia otwarty” z SSH
źródło
Miałem ten sam problem i zdałem sobie sprawę, że to DNS. Ruch jest tunelowany, ale żądanie DNS nie. Spróbuj ręcznie edytować plik hostów DNS i dodaj usługę, do której chcesz uzyskać dostęp.
źródło
Mój przypadek:
źródło
Wystąpił ten błąd podczas pisania tego wpisu na moim blogu :
/etc/ssh/sshd_config
miał coś takiego:Ale
~/.ssh/config
miał:Zwróć uwagę na różnicę wielkości liter ( wielkość liter) między SSHBeyondRemote.server.com:22 a sshbeyondremote.server.com:22 .
Po naprawieniu sprawy nie widziałem już problemu.
Używałem:
Wersja klienta OpenSSH:
Wersja serwera OpenSSH:
źródło
Inna przyczyna rozpoznawania nazw: Mój / etc / hosts miał błędny adres IP dla nazwy serwera (nie dla localhost), na przykład:
Ale skonfigurowany adres IP serwera (i nazwa DNS rozwiązana za pomocą komend host / dig) to 192.168.2.47. Prosta literówka spowodowana poprzednią rekonfiguracją adresu IP. Po naprawieniu / etc / hosts połączenie tunelowe działało bezbłędnie:
To dziwne, że prawdziwe IP spowodowało awarię, gdy używałem literalnego adresu IP hosta lokalnego dla tunelu. Distro: Ubuntu 16.04 LTS.
źródło
Powód, dla którego miałem tę wiadomość, nie jest najczęstszy, ale warto o tym wspomnieć. Wygenerowałem przez skrypt listę tuneli i aby zapewnić prezentację kolumny, wydrukowałem każdy ostatni bajt na dwóch bajtach. Kiedy próbowałem otworzyć przekierowanie do tunelu na 192.168.66.08, zawsze się nie udawało, ponieważ „08” jest interpretowane przez gethostbyaddr jako niepoprawna liczba ósemkowa :)
źródło
Wydaje się, że istnieje wiele możliwych przyczyn tego komunikatu. W moim przypadku była to niemożność dostępu do pilota, ponieważ nie podałem poprawnie pliku klucza .
-L
Opcja dodaje niejawny skok ssh (efektywnie przy użyciu wyraźnej hosta jako serwer SSH / skoku bastion). Debugowanie tego może być łatwiejsze, wykonując skok jawnie i tworząc powłokę logowania na maszynie docelowej za pomocą polecenia „proxy”.Gdy to zadziała, możesz wykonać przekierowanie portu na podstawie komputera docelowego
localhost
(zakładając, że może on zalogować się do siebie):źródło