Когда я открываю этот туннель SSH:
ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983
Я получаю эту ошибку при попытке получить доступ к HTTP-серверу, работающему на localhost: 8984:
channel 1: open failed: administratively prohibited: open failed
Что означает эта ошибка, и на какой машине вы можете решить проблему?
remote
» в моем случае.Ответы:
Приведенное выше сообщение относится к вашему SSH-серверу, отклонившему запрос вашего SSH-клиента об открытии побочного канала. Это обычно происходит из
-D
,-L
или-w
, как отдельные каналы в потоке SSH требуется , чтобы переправить пересылаемые данные поперек.Поскольку вы используете
-L
(также применимо к-D
), существует два варианта, по которым ваш SSH-сервер отклоняет этот запрос:AllowTcpForwarding
(как упоминал Стив Бузонас)PermitOpen
Эти варианты можно найти в
/etc/ssh/sshd_config
. Вы должны убедиться, что:AllowTCPForwarding
либо отсутствует, либо закомментировано, либо установлено наyes
PermitOpen
либо отсутствует, либо закомментировано, либо имеет значениеany
[1]Кроме того, если вы используете для подключения ключ SSH, вам следует убедиться, что запись, соответствующая вашему ключу SSH
~/.ssh/authorized_keys
, не имеет операторовno-port-forwarding
илиpermitopen
[2].Не относится к вашей конкретной команде, но в некоторой степени относится и к этой теме, это
PermitTunnel
вариант, если вы пытаетесь использовать опцию -w.[1] Полный синтаксис на
sshd_config(5)
странице руководства .[2] Полный синтаксис на
authorized_keys(5)
странице руководства .источник
lxc.cgroup.devices.allow = c 10:200 rwm
в конфигурацию вашего контейнера и убедиться, что если/dev/net/tun
он не существует,mknod /dev/net/tun c 10 200; chmod 666 /dev/net/tun
запускается при загрузке в контейнере.AllowTcpForwarding
позволяет перенаправлять порты TCP через SSH, что и-L 0.0.0.0:8984:remote:8983
запрашивается параметром. ЕслиAllowTcpForwarding
установлено значениеno
, SSH отклонит запрос на переадресацию портов, в результате чего вы увидите эту ошибку.AllowTCPForwarding
toAllowTcpForwarding
, но SE хочет изменить как минимум 6 символов. Так что просто отметьте, что правильным вариантом являетсяTcp
версия, которая используется правильно с первого раза.В очень странном случае я также столкнулся с этой ошибкой при попытке создать локальный туннель. Моя команда была примерно такой:
Проблема заключалась в том, что на удаленном хосте
/etc/hosts
не было записи для «localhost», поэтому сервер ssh не знал, как настроить туннель. Очень недружелюбное сообщение об ошибке для этого случая; рад, что наконец понял это.Урок: убедитесь, что имя целевого хоста вашего туннеля разрешено удаленным хостом, либо через DNS, либо
/etc/hosts
.источник
user@remote
), затем с удаленного конца устанавливает туннели к указанным целевым хостам (в приведенной выше команде это такlocalhost
). При этом он использует схему разрешения имени хоста на удаленном хосте. Поэтому, если компьютер, на котором вы работаете по SSH, не может разрешитьlocalhost
, вы получите это сообщение об ошибке.По крайней мере, один ответ заключается в том, что «удаленный» компьютер по какой-то причине недоступен по ssh. Сообщение об ошибке просто абсурдно.
источник
Если «удаленный» не может быть разрешен на сервере, вы получите эту ошибку. Замените на IP-адрес и посмотрите, решит ли это вашу проблему ...
(В основном тот же ответ, что и у Нила, но я определенно обнаружил, что это проблема на моей стороне) [У меня был псевдоним для имени машины в моем
~/.ssh/config
файле - и удаленная машина ничего не знала об этом псевдониме ...источник
-D
(DynamicForward) в качестве SOCKS-прокси в браузере. Т.е. пытается получить доступ к веб-сайту, который не может разрешить хост туннеля.Эта ошибка окончательно появляется при использовании опций ssh
ControlPath
иControlMaster
при совместном использовании одного сокетного соединения для повторного использования между несколькими клиентскими соединениями (от одного клиента до одного и того же пользователя @ сервера). Открытие слишком много (что бы это ни значило, в моем случае ~ 20 соединений) приводит к этому сообщению. Закрытие любых предыдущих подключений позволяет мне открывать новые, снова до предела.источник
MaxSession
ноMaxSessions
. Хотя есть некоторые средства защиты, не«Административно запрещено» - это специальный флаг сообщения ICMP, который сводится к «Администратор явно хочет, чтобы это соединение было заблокировано».
Проверьте настройки iptables.
источник
ssh
не имеет логики для определения причины сбоя соединения, он просто предполагает, что если вы пытаетесь установить соединение, значит, оно существует, и если вы не можете получить его, соединение должно быть намеренно заблокировано.Похожая проблема
Еще одно возможное преимущество
У меня была та же проблема , используя
~/.ssh/authorized_keys
сpermitopen
.Поскольку я использую
autossh
для создания туннеля, мне нужно два порта:На стороне клиента
Это дало мне похожую проблему с портом мониторинга:
У меня было это сообщение (через 10 минут):
На удаленной стороне
Мой
/var/log/auth.log
содержал:В моей
~/.ssh/authorized_keys
(удаленной стороне) у меня было это:Как это решить
Я решил это, заменив
localhost
экземпляры на127.0.0.1
:Кажется , что SSH не понимает , что
localhost
это ярлык127.0.0.1
, следовательно, сообщениеauth.log
и запрещен администратором сообщение.Здесь я понимаю, что административно означает «из-за конкретной конфигурации на стороне сервера».
источник
Это также происходит, когда
/etc/sshd_config
имеетустановлен. Включите его, чтобы
yes
разрешить пересылку TCP.источник
В моем случае, мне пришлось заменить
localhost
с127.0.0.1
в:заставить это работать.
Я пытался
rdesktop -L localhost:1234
следовать инструкциям Amazon по подключению к AWS EC2 через SSH-туннелирование . Я пытался изменить/etc/ssh/sshd_config
(как клиент, так и сервер запускают Ubuntu 16.04 LTS) в ответ на самый высокий голос. Я также проверил, чтоlocalhost
находится/etc/hosts
с обеих сторон.Ничего не работало, пока я не изменил
ssh
саму команду на:источник
Некоторые действия по устранению неполадок необходимы, чтобы найти окончательный ответ:
источник
Однажды я получил эту ошибку за то, что отдал пульт в параметре -L, также 0.0.0.0 является избыточным, вы можете опустить его с теми же результатами, и я думаю, что вы должны добавить -g, чтобы он работал.
Это линия, которую я использую для туннелирования:
ssh -L 8983:locahost:8984 user@remote -4 -g -N
источник
Это также может быть вызвано невозможностью привязки к порту на локальной стороне.
Эта команда пытается связать прослушивающий порт 1234 на локальном компьютере, который сопоставляется со службой через порт 5678 на удаленном компьютере.
Если порт 1234 на локальной машине уже используется другим процессом (возможно, фоновым сеансом ssh -f), то ssh не сможет прослушивать этот порт, и туннель не будет работать.
Проблема в том, что это сообщение об ошибке может означать любую из нескольких вещей, а «административно запрещено» иногда дает неверное представление. Поэтому, в дополнение к проверке DNS, межсетевых экранов между локальным и удаленным и sshd_config, проверьте, используется ли локальный порт. использование
чтобы выяснить, какой процесс запущен на 1234. Вам может понадобиться sudo для lsof, чтобы вывести список процессов, принадлежащих другим пользователям. Тогда вы можете использовать
чтобы выяснить, что это за процесс.
Чтобы получить все это в одной команде:
источник
У меня было то же сообщение при попытке туннелирования. Возникла проблема с DNS-сервером на удаленной стороне. Проблема была решена, когда он вернулся на работу.
источник
Я очень удивлен, что никто не упомянул, что это может быть проблемой DNS.
Это может быть представлено, если
remote
это не разрешимо, или вы вводите неизвестный синтаксис, как я сделал здесь, где я добавилuser@
к логике переадресации порта (которая не будет работать).источник
В моем случае проблема была связана с запросом туннеля без доступа к оболочке, в то время как сервер пытался принудительно изменить пароль для моей учетной записи. Из-за отсутствия оболочки я не смог этого увидеть и получил только ошибку
Моя конфигурация туннеля была следующей:
Ошибка при входе непосредственно на сервер (без -N -f):
Я решил проблему, выполнив вход с доступом к оболочке и изменив пароль. Тогда я мог бы просто снова использовать туннели без доступа к оболочке.
источник
У меня была эта проблема при попытке подключения через SSH с пользователем, который был авторизован для подключения только по SFTP.
Например, это было на сервере
/etc/ssh/sshd_config
:Таким образом, в этом случае, чтобы использовать SSH, вам придется либо удалить пользователя из эквивалентной
sftponly
группы, либо подключиться, используя пользователя, который не ограничен SFTP.источник
Проверьте,
/etc/resolv.conf
пусто ли на сервере, на котором вы собираетесьssh
. Несколько раз я обнаружил, что это связано с пустым/etc/resolv.conf
файломЕсли не root, вы можете просто проверить на сервере, попробовав несколько
ping
илиtelnet
(80) для публичного имени хоста, то есть:После добавления записей сервера имен в
/etc/resolv.conf
:Однако следует также проверить, почему он
/etc/resolv.conf
был пустым (обычно он заполняется записями сервера имен с помощью клиента dhcp на сервере, если это применимо).источник
Я получал то же сообщение во время настройки SSH для Debian. Оказалось, что в удаленной системе не было свободного места. После освобождения дискового пространства и перезагрузки туннель начал работать.
источник
Я видел эту ошибку на Cygwin, и это должно быть верно и для Linux и работал для меня. В моем случае я сделал ssh -ND *: 1234 user@127.0.0.1, и когда я подключил браузер к этому серверу comp-socks, он просматривал, но на компе, где я запускал команду ssh, я получил эту ошибку, появляющуюся в консоль с каждым запросом - по крайней мере для одного сайта, хотя браузер извлекал его через прокси или, казалось, по крайней мере в той степени, в которой я видел основной возраст. Но внесение этого изменения избавило от неудачного сообщения
http://linuxindetails.wordpress.com/2010/02/18/channel-3-open-failed-administratively-prohibited-open-failed/
источник
ACCEPT
.AllowTCPForwarding
, что комментарий, о котором вы говорите,# To disable tunneled clear text
касаетсяPasswordAuthentication
установки на no,PermitTunnel
это настройка, позволяющая сетевым туннелям уровня 2 или уровня 3 через tun / tap и по умолчанию no. Опции L, R и D используют переадресацию TCP, а не устройство для туннелирования.Еще один сценарий - служба, к которой вы пытаетесь получить доступ, не работает. Я столкнулся с этой проблемой на днях, только чтобы вспомнить, что экземпляр httpd, к которому я пытался подключиться, был остановлен.
Ваши шаги по решению проблемы - начать с самого простого: перейти на другой компьютер и посмотреть, сможете ли вы подключиться локально, а затем вернуться к клиентскому компьютеру. По крайней мере, это позволит вам решить, в какой момент общение не происходит. Вы можете использовать другие подходы, но это тот, который работал для меня.
источник
Проверьте свой маршрутизатор на предмет защиты от перепривязки DNS . Мой маршрутизатор (pfsense) имеет включенную по умолчанию защиту перезаписи DNS. Это приводило к ошибке «канал открыт: ошибка административно запрещена: ошибка открытия» с SSH
источник
У меня была та же проблема, и я понял, что это был DNS. Трафик туннелируется, но DNS-запроса нет. Попробуйте вручную отредактировать файл DNS hosts и добавить сервис, к которому вы хотите получить доступ.
источник
Мое дело:
источник
Я получил эту ошибку при записи этой записи в моем блоге :
/etc/ssh/sshd_config
было что-то вроде:Но
~/.ssh/config
имел:Обратите внимание на разницу в регистре (с большой буквы) между SSHBeyondRemote.server.com:22 и sshbeyondremote.server.com:22 .
Как только я исправил дело, я больше не видел проблему.
Я использовал:
Версия клиента OpenSSH:
Версия сервера OpenSSH:
источник
Другая причина разрешения имен: Мой / etc / hosts имел ошибочный IP-адрес для имени сервера (не для localhost), например так:
Но настроенный IP-адрес сервера (и DNS-имя, разрешенное с помощью команд host / dig) был 192.168.2.47. Простая опечатка, вызванная предыдущей реконфигурацией IP. После исправления / etc / hosts туннельное соединение работало безупречно:
Странно, что настоящий IP-адрес вызвал сбой, когда я использовал локальный IP-адрес localhost для туннеля. Дистро: Ubuntu 16.04 LTS.
источник
Причина, по которой я получил это сообщение, не самая распространенная, но стоит упомянуть. Я сгенерировал с помощью сценария список туннелей, и для обеспечения представления столбца я напечатал каждый последний байт по два байта. Когда я пытался открыть переадресацию туннеля на 192.168.66.08, это всегда не удавалось, потому что '08' интерпретируется gethostbyaddr как неверное восьмеричное число :)
источник
Кажется, есть много возможных корневых причин для этого сообщения. В моем случае это была невозможность доступа к удаленному, потому что я не предоставил файл ключа правильно.
-L
Опция добавляет неявное SSH прыжок (эффективно используя явный SSH хоста в качестве сервера / скачки бастиона). Это может быть легче отладить, выполнив переход явно и создав оболочку входа в систему на целевой машине с помощью команды proxycommand.Как только это сработает, вы можете сделать переадресацию порта на основе целевого компьютера
localhost
(при условии, что он может войти в себя):источник