2019. 11. 3. 20:29ㆍ프로그래밍/ErrorReport
Jcraft(Jsch)를 이용하여 SSH 접속을 시도할 대 제목과 같은 오류가 발생되었다.
이 문제 때문에 오랜 시간을 끙끙 앓던 도중 극적으로 도움을 받아 문제를 해결할 수 있었다.
해당 오류는 SSH 접속시 필요한 key 사이즈를 2048로 기본 설정되어 솔라리스os 같은 곳에서는 키 사이즈를 2047까지만 지원해서 생기는 오류인 듯 하다.
검색을 해보니 DH 알고리즘을 사용하도록 BouncyCastleProvider 를 설정해주는 방법과 키 사이즈를 1024로 바꾸라는 것이었는데, BouncyCastleProvider는 근본적인 해결책이 아닌 듯 했고, 키 사이즈 자체를 1024로 바꾸면 보안상 문제가 발생될 수가 있으니 다른 방법을 찾아야 했다.
DH key size must be multiple of 64, and can only range from 512 to 2048 (inclusive)
I have a set-up in which I am executing a build from Jenkins on a Solaris Server connecting via sshexec task in ANT. On trigerring the build, it is throwing below error: com.jcraft.jsch.JSchExc...
stackoverflow.com
DHGEX failing with 2048-bit key under Java 8, but succeeding with 1024-bit key
I'm using JSCH 0.1.53 to connect to a remote SSH server, which uses a 1024-bit RSA key. We are able to connect successfully to the remote server when we also use a 1024-bit RSA key, but when we
stackoverflow.com
위 두곳을 확인해보니 jcraft 라이브러리 jar 파일을 풀어서 DHGEX.java 파일에서 2048 체크하는 코드를 하드코딩으로 1024로 수정하고 다시 jar 로 압축하는 방법이 있었는데 이것보다 더욱 간단한 방법이 숨어있었다.
바로 jcraft 라이브러리 버전을 낮추는 것이었다!
0.1.53 버전부터는 key size를 무조건 2048인지만 체크하는데, 0.1.50 버전 같은 버전에서는 1024부터 체크한다. 따라서 메이븐에서 라이브러리 버전만 바꾸면 되는 무진장 간단한 해결법이었다.
결론은 어떠한 문제가 발생되었을 경우 라이브러리를 100% 믿지 말고 jar 파일을 수정할 생각을 해보든지, 라이브러리 버전을 바꿔보자. 라이브러리도 사람이 만든 것이므로 버그가 있을 수도 있고, 라이브러리 버전이 무조건 최신인 것만이 능사는 아닌 것이다.