반응형
문제
- Java에서 SSH 연결을 하려고 JSch 라이브러리를 사용하는데 정상적인 개인 키 파일을 사용함에도 불구하고 키가 일치하지 않는 에러 메시지가 발생하였다.
원인
- OpenSSH(7.8 이상)은 키를 생성할 때, 기존과는 다른 새로운 OpenSSH 형식으로 키를 생성한다.
- JSch에서는 이 새로운 형식으로 만드는 키 형식을 지원하지 않는다.
해결
- 새로운 형식으로 만들어진 OpenSSH 키를 클래식 OpenSSH 형태로 변환.
ssh-keygen
을 사용하여JSch
에서 사용할 수 있도록 기존에 만들어진 개인 키 파일의 형식을 변환한다.
ssh-keygen -p -f file -m pem -P passphrase -N passphrase
-p
- 새 개인 키를 만드는 대신 개인 키 파일의 암호를 변경하도록 요청합니다. 프로그램은 개인 키가 포함된 파일, 이전 암호 및 새 암호에 대해 두 번 묻는 메시지를 표시합니다.
-f 파일 이름
- 키 파일의 파일 이름을 입력합니다.
-m 키 형식
- 키 생성을 위한 키 형식,
-i
(가져오기),-e
(내보내기) 변환 옵션 및-p
암호 변경 작업을 지정합니다.
- 후자는 OpenSSH 개인 키와 PEM 개인 키 형식 간에 변환하는 데 사용할 수 있습니다.
- 지원되는 키 형식은 "RFC4716"(RFC 4716/SSH2 공개 또는 개인 키), "PKCS8"(PKCS8 공개 또는 개인 키) 또는 "PEM"(PEM 공개 키)입니다.
- 기본적으로 OpenSSH는 새로 생성된 개인 키를 자체 형식으로 작성하지만 내보내기를 위해 공개 키를 변환할 때 기본 형식은 "RFC4716"입니다.
- 지원되는 개인 키 유형을 생성하거나 업데이트할 때 "PEM" 형식을 설정하면 키가 레거시 PEM 개인 키 형식으로 저장됩니다
- 키 생성을 위한 키 형식,
-P 암호
- 키를 읽을 때 (이전) 암호를 제공합니다. 암호를 설정하지 않았다면
“”
를 입력한다.
- 키를 읽을 때 (이전) 암호를 제공합니다. 암호를 설정하지 않았다면
-N 새 암호
- 키에 대한 새 암호를 제공합니다. 암호를 설정하지 않으려면
“”
를 입력한다.
- 키에 대한 새 암호를 제공합니다. 암호를 설정하지 않으려면
- 명령어를 입력하여 키 파일 형식을 정상적으로 변환한 모습이다.
- 기존 개인 키 파일의 일부 내용
- 기존 개인 키 파일을 형식 변환한 후 일부 내용
- 개인 키 파일을 변환한 후, 에러 메시지도 출력되지 않았다.
[참고자료]
https://stackoverflow.com/questions/53134212/invalid-privatekey-when-using-jsch/55740276
반응형