На що посилаються номери каналів у ssh-повідомленні про помилку?


12

У наведеному нижче прикладі, чому відповідають номери каналів? Які на сервері? Які є у клієнта?

  $ ssh -L1570:127.0.0.1:8899 root@thehost
    Password:
    Last login: Fri Aug  9 13:08:44 2013 from theclientip
    Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
    You have new mail.
    # channel 2: open failed: administratively prohibited: open failed
    channel 3: open failed: administratively prohibited: open failed
    channel 2: open failed: administratively prohibited: open failed

Ssh-клієнт працює на Windows 7, а сервер має сервер Tomcat, що працює на порту 8899.

Tomcat не слухає 127.0.0.1 на віддаленій машині, тому, якщо я зміню команду на ssh -L1570:thehostpublicip:8899 root@thehostпорт, працює вперед. Тож я знаю, що, здається, переадресація портів працює на сервері чудово.

мій конфігураційний файл sshd містить такі два рядки:

# Port forwarding
AllowTcpForwarding yes

# If port forwarding is enabled, specify if the server can bind to INADDR_ANY.
# This allows the local port forwarding to work when connections are received
# from any remote host.
GatewayPorts yes

Я намагаюся налаштувати переадресацію портів на інший процес, а не на Tomcat, і я отримую повідомлення про помилки, подібні до наведених вище матеріалів, тому я намагаюся зрозуміти значення повідомлень про помилки.

Відповіді:


21

З документації щодо протоколу SSH стосовно каналів:

Усі термінальні сеанси, переадресовані з'єднання тощо - це канали. Будь-яка сторона може відкрити канал. Кілька каналів мультиплексуються в одне з'єднання.

Канали ідентифікуються за номерами на кожному кінці. Число, що посилається на канал, може бути різним на кожній стороні. Запити на відкриття каналу містять номер каналу відправника. Будь-які інші пов’язані з каналом повідомлення містять номер одержувача каналу.

Канали контролюються потоком. Жодні дані не можуть надсилатися каналу, поки не буде отримано повідомлення, яке вказує на наявність вільного простору.

Експедиція портів

Команда у вас виглядає чудово. Ви впевнені, що послуга, з якою ви намагаєтеся підключитися, налаштована та приймає з'єднання? Помилки каналу, схоже, вказують на те, що це не так.

Які мої активні канали?

Якщо у вас є активне sshз'єднання, ви можете використовувати таку комбінацію клавіш, щоб отримати допомогу:

Shift+ ~слідом за Shift+?

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
debug2: channel 2: written 480 to efd 8

Потім ви можете використовувати цю комбінацію клавіш, щоб отримати список активних каналів:

Shift+ ~слідом за Shift+#

$ ~#
The following connections are open:
  #2 client-session (t4 r0 i0/0 o0/0 fd 6/7 cc -1)
debug2: channel 2: written 93 to efd 8

4

Якщо tomcat не прослуховує циклічне відтворення (127.0.0.1), порт, який пересилається до цього, передасть повідомлення про помилку, яке ви отримували.

Якщо я роблю ssh, переходячи до порту, який не слухає (наприклад: ssh -L1234:127.0.0.1:9999 10.0.0.1- де жоден процес на 10.0.0.1 не пов'язаний з портом 9999 на 127.0.0.1), я отримую ту ж помилку:

channel 2: open failed: administratively prohibited: open failed

Ви можете дізнатися, на який канал посилається, додавши -vvvв свій ssh

ssh -vvv -L1570:127.0.0.1:8899 root@thehost

Який порт прослуховує "інший процес" (і на яких IP-адресах), netstat -tulpnпідтвердить, які порти та IP-процеси використовуються на ваших серверах, -L повинен буде вказувати адресу та порт, який він слухає.


Я не можу відтворити сказане. Ви вмикаєте параметри ssh або в клієнті, і / або в сервері, щоб отримати це?
slm

Ні (звичайні конфігурації "поза коробкою" з обох сторін). Наскільки я можу розібратися, ви отримаєте, connect failed: Connection refusedколи брандмауер відмовить у з’єднанні. administratively prohibited: open failedзнаходиться на хості без брандмауера.
Drav Sloan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.