ssh 로컬 포트 포워딩을 통한 JConsole
JMX가 노출 된 Java 서비스에 원격으로 연결하고 싶지만 방화벽에 의해 차단되었습니다. ssh 로컬 포트 전달을 사용하려고했지만 연결이 실패합니다. wireshark를 살펴보면 jconsole에 연결하려고 할 때 방화벽에 의해 차단 된 포트 9999에 연결 한 후 일부 임시 포트를 통해 연결하려고하는 것으로 보입니다.
jconsole을 9999를 통해서만 연결하거나 프록시를 사용하는 방법이 있습니까? 가 이 문서는 여전히 최선의 해결책 ? 아니면 뭔가 빠졌나요?
jconsole을 9999를 통해서만 연결하거나 프록시를 사용하는 방법이 있습니까? 가 이 문서는 여전히 최선의 해결책? 아니면 뭔가 빠졌나요?
예, 그 기사가 맞습니다.
당신이 당신의 서버에 JMX 포트를 지정하면 ( -Dcom.sun.management.jmxremote.port=####
), 당신은 실제로 지정하는 단지 응용 프로그램에 대한 레지스트리 포트입니다. 연결할 때 jconsole이 실제로 모든 작업을 수행하는 추가 서버 포트를 제공합니다. 작업을 시작하려면 레지스트리와 서버 포트를 모두 알아야 합니다 .
다음과 같은 방법이 레지스트리 및 서버 포트를 8000으로 설정하여 응용 프로그램을 실행하는 데 작동합니다 . 자세한 내용 은 여기를 참조하십시오 .
-Dcom.sun.management.jmxremote.port=8000
-Dcom.sun.management.jmxremote.rmi.port=8000
제쳐두고, 내 SimpleJMX 라이브러리를 사용하면 두 포트를 쉽게 설정할 수 있으며 둘 다 동일한 포트로 설정할 수 있습니다.
따라서 전달해야하는 두 포트를 모두 알고 있으면 ssh
명령을 설정할 수 있습니다 . 예를 들어 레지스트리 및 서버 포트를 8000으로 구성하는 경우 다음을 수행합니다.
ssh -L 8000:localhost:8000 remote-host
이렇게하면 원격 호스트의 localhost : 8000으로 전달되는 로컬 포트 8000이 생성됩니다. -L
여러 포트를 전달해야하는 경우 여러 인수 를 지정할 수 있습니다 . 그런 다음 jconsole을 localhost : 8000에 연결하면 원격 호스트에 적절하게 연결됩니다.
또한 서버에 여러 인터페이스가있는 경우 올바른 인터페이스에 바인딩 할 레지스트리 및 서버 포트를 가져 오려면 다음 변수를 모두 설정해야 할 수 있습니다.
-Djava.rmi.server.hostname=10.1.2.3
JConsole이 SOCKS를 지원하기 때문에 SSH 양말 터널을 사용하여이 작업을 수행하는 더 좋은 방법이 있습니다.
일부 사용 가능한 포트 (예 : 7777)에서 로컬로 SSH socks 프록시를 만듭니다.
ssh -fN -D 7777 user @ firewalled-host
SOCKS 프록시 (예 : localhost : 7777)와 JMX 서버의 주소 (예 : localhost : 2147)를 지정하여 JConsole을 실행합니다.
jconsole -J-DsocksProxyHost = localhost -J-DsocksProxyPort = 7777 서비스 : jmx : rmi : /// jndi / rmi : // localhost : 2147 / jmxrmi -J-DsocksNonProxyHosts =
아래 답변 중 하나에서 언급했듯이 JDK 8u60 + -J-DsocksNonProxyHosts=
에서 작동하려면 옵션이 있어야합니다.
거의 모든 최신 JDK 버전 (7u25 이상)에서 이제 SSH를 통해 JConsole 및 Visual JVM을 매우 쉽게 사용할 수 있습니다 ( 이제 JMX를 단일 포트에 바인딩 할 수 있기 때문 ).
다음 JVM 매개 변수를 사용합니다.
-Dcom.sun.management.jmxremote.port=8090
-Dcom.sun.management.jmxremote.rmi.port=8090
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
그런 다음 SSH 연결을 시작합니다.
ssh my.javaserver.domain -L 8090:127.0.0.1:8090
JConsole에서 연결 한 후
원격 프로세스 :-> localhost : 8090
그리고 Java Visual VM
로컬-> JMX 연결 추가-> localhost : 8090을 마우스 오른쪽 버튼으로 클릭합니다.
최신 Java 버전 (약 8u66)에서 SSH socks 방법을 계속하면 socksNonProxyHosts를 비워 두어야합니다.
jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7777 -J-DsocksNonProxyHosts=
참고 URL : https://stackoverflow.com/questions/15093376/jconsole-over-ssh-local-port-forwarding
'Nice programing' 카테고리의 다른 글
Django 파일 업로드 크기 제한 (0) | 2020.12.09 |
---|---|
Java에서 System.out.println의 의미는 무엇입니까? (0) | 2020.12.09 |
현재 디렉터리를 확인할 수 없습니다. (0) | 2020.12.09 |
Swift 용 UITableView 예제 (0) | 2020.12.09 |
Lambda 표현식이 C # 클로저에 있습니까? (0) | 2020.12.09 |