아래 예에서 채널 번호는 무엇에 해당합니까? 어느 서버에 있습니까? 어느 쪽이 클라이언트에 있습니까?
$ 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이 아닌 다른 프로세스에 포트 전달을 설정하려고하는데 위의 내용과 유사한 오류 메시지가 표시되므로 오류 메시지의 의미를 이해하려고합니다.
답변
로부터 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
답변
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은 수신중인 주소와 포트를 가리켜 야합니다.