SSH 터널을 통해 서로 다른 서버에서 실행되는 여러 JVM을 모니터링하려고 합니다.
여기 UNIX 전문가 덕분에 다음을 통해 단일 서버에서 실행할 수 있었습니다.
jstatd
대상 서버에서 실행- 9696을 양말 프록시 포트로 사용하도록 Visual VM을 설정합니다.
내 로컬 PC에서 다음을 실행합니다.
ssh -L 2222:server1:22 bastion-host
내 로컬 PC에서 다음을 실행합니다.
ssh -o port=2222 -D 9696 -L 1099:localhost:1099 localhost
이렇게 하면 문제가 해결됩니다. 이제 두 번째 서버로 터널링을 시도할 때 다음을 시도합니다.
내 로컬 PC에서 다음을 실행합니다.
ssh -L 3333:server2:22 bastion-host
내 로컬 PC에서 다음을 실행합니다.
ssh -o port=3333 -D 9696 -L 2099:localhost:1099 localhost
그러나 마지막 단계에서는 다음과 같이 불평합니다.
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 9696
비슷한 일을 해낸 사람이 있나요?
고쳐 쓰다:
이렇게 복잡한 이유는 jstatd가 RMI 서버 애플리케이션이기 때문입니다.
http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html
RMI 애플리케이션과 마찬가지로 rmiregistry를 사용하여 등록됩니다. 방화벽을 통해 rmi를 사용하려면 아래 설명된 대로 SOCKS를 사용해야 합니다.
http://download.oracle.com/javase/1.4.2/docs/guide/rmi/faq.html#firewallOut
불행히도 VisualVM에서는 SOCKS 프록시 포트를 한 번만 설정할 수 있으며 -D 옵션을 사용하면 동일한 로컬 포트를 두 서버 모두에 전달할 수 없습니다.
답변1
이미 컴퓨터(컴퓨터 A)가 있고 특정 포트에서 직접 연결할 수 없는 두 개의 서버(A와 B)가 있어서 SSH 터널을 통해 연결하려고 한다고 생각한 것이 맞습니까? ?
그렇다면 -D 대신 -L을 사용하여 서로 다른 로컬 포트의 머신에서 두 개의 터널(각 대상 서버에 하나씩)을 생성한 다음 모니터링 도구(에이전트 없는 설정)에서 로컬 머신에 연결할 수 있습니다. 확인하려는 원격 서버.
ssh -L 9000:localhost:<local port jstatd listens on> user@server1
ssh -L 9001:localhost:<local port jstatd listens on> user@server2
그런 다음 로컬 모니터를 사용하여 localhost:9000 및 localhost:9001에 연결합니다. 이 터널은 대상 jstatd에 연결됩니다.
중간 서버가 있으면 2홉 터널이 있고,
ssh -L 9000:server1:<local port jstatd listens on> user@bastion-host
ssh -L 9001:server2:<local port jstatd listens on> user@bastion-host
글쎄요, bastion-host가 모든 JVM과 통신할 수 있다면
ssh -D 9000 user@bastion-host
포트 9000을 통해 사용할 수 있는 양말 프록시를 만드는 것으로 충분합니다.
답변2
SSH 맨페이지에서:
-D [bind_address:]port
Specifies a local “dynamic” application-level port forwarding.
This works by allocating a socket to listen to port on the local
side, optionally bound to the specified bind_address. Whenever a
connection is made to this port, the connection is forwarded over
the secure channel, and the application protocol is then used to
determine where to connect to from the remote machine. Currently
the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
as a SOCKS server. Only root can forward privileged ports.
Dynamic port forwardings can also be specified in the configura‐
tion file.
전달을 위해 동일한 로컬 포트를 두 번 지정합니다 -D 9697
.
답변3
마지막 단계에 모든 것이 나와 있습니다. 포트 9696에서 수신 대기를 시작할 수 없습니다. 이는 두 번째 터널인 경우 첫 번째 터널을 처리하는 동안 다른 포트 9696을 사용해야 하기 때문입니다.