반응형

문제

  • 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

https://www.ssh.com/academy/ssh/keygen#what-is-ssh-keygen

https://man.openbsd.org/ssh-keygen

반응형

+ Recent posts