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에서 실행 중이고 서버에는 포트 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이 아닌 다른 프로세스에 포트 전달을 설정하려고하는데 위의 내용과 유사한 오류 메시지가 표시되므로 오류 메시지의 의미를 이해하려고합니다.

답변:


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의 프로세스가 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은 수신중인 주소와 포트를 가리켜 야합니다.


위의 내용을 재현 할 수 없습니다. 이것을 얻기 위해 클라이언트 및 / 또는 서버에서 ssh 매개 변수를 활성화하고 있습니까?
slm

아니요 (양쪽의 표준 '기본 구성'구성). 내가 해결할 수 connect failed: Connection refused있는 한 방화벽이 연결을 거부 하면 얻을 수 있습니다 . administratively prohibited: open failed방화벽이없는 호스트에 있습니다.
Drav Sloan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.