아래 예에서 채널 번호는 무엇에 해당합니까? 서버에는 어떤 것이 있나요? 클라이언트 측에는 어떤 것이 있나요?
$ 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
-vvv
SSH에 추가하여 어떤 채널이 참조되고 있는지 확인할 수 있습니다.
ssh -vvv -L1570:127.0.0.1:8899 root@thehost
"다른 프로세스"가 수신 중인 포트(및 IP 주소)는 netstat -tulpn
서버의 프로세스가 사용 중인 포트와 IP를 확인합니다. -L은 수신 중인 주소와 포트를 가리켜야 합니다.