SSH 오류 메시지의 채널 번호는 무엇을 의미합니까?

SSH 오류 메시지의 채널 번호는 무엇을 의미합니까?

아래 예에서 채널 번호는 무엇에 해당합니까? 서버에는 어떤 것이 있나요? 클라이언트 측에는 어떤 것이 있나요?

  $ 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에서 실행되고 있으며 서버에는 포트 8899에서 실행되는 Tomcat 서버가 있습니다.

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이 아닌 다른 프로세스에 대한 포트 전달을 설정하려고 하는데 위와 비슷한 오류 메시지가 표시되어 오류 메시지의 의미를 이해하려고 합니다.

답변1

~에서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

답변2

Tomcat이 루프백(127.0.0.1)을 수신하지 않는 경우 해당 포트로 전달된 포트에서 받은 오류 메시지를 표시합니다.

ssh를 수행하여 포트를 비수신 포트로 전달하면(예: ssh -L1234:127.0.0.1:9999 10.0.0.1- 10.0.0.1의 프로세스가 127.0.0.1의 포트 9999에 바인딩되지 않음) 동일한 오류가 발생합니다.

channel 2: open failed: administratively prohibited: open failed

-vvvSSH에 추가하여 어떤 채널이 참조되고 있는지 확인할 수 있습니다.

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

"다른 프로세스"가 수신 중인 포트(및 IP 주소)는 netstat -tulpn서버의 프로세스가 사용 중인 포트와 IP를 확인합니다. -L은 수신 중인 주소와 포트를 가리켜야 합니다.

관련 정보