อันนี้จดไว้ก่อนเป็นเคสแปลกที่เจอช่วยน้องในทีมลองในบ้านตัว Spring Boot App + SFTP ผ่าน แต่พอไปที่ Site ลูกค้าพังซะงั้น ทีมที่เป็น Deploy แจ้ง Error มาเต็มๆ ตามนี้ครับ
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [xxxx@95adcf19b425 at com.jcraft.jsch.KeyPair.load(KeyPair.java:747) at com.jcraft.jsch.KeyPair.load(KeyPair.java:561) at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40) at com.jcraft.jsch.JSch.addIdentity(JSch.java:407) at com.jcraft.jsch.JSch.addIdentity(JSch.java:388) at org.apache.camel.component.file.remote.SftpOperations.createSession(SftpOperations.java:184) at org.apache.camel.component.file.remote.SftpOperations.connect(SftpOperations.java:113 ...
ที่นี้ก็งงสิครับว่าเปิดอะไรขึ้น แต่หลังจากไปค้นข้อมูลมา อ่อ เป็นเรื่องของ Version OpenSSH ที่ใช้ Generate Public Private Key ครับ
- ก่อน OpenSSH (7.8)
-----BEGIN RSA PRIVATE KEY----- your-data -----END RSA PRIVATE KEY-----
- key มาถูกสร้างโดย OpenSSH (7.8) ขึ้นไป
-----BEGIN OPENSSH PRIVATE KEY----- your-data -----END OPENSSH PRIVATE KEY-----
ที่นี้กลับมาที่ Code บ้าง ตัว lib spring ใช้ lib jsch ซึ่งตอนนี้ปี 2025 code ทีแก้ล่าสุด 8-9 ปีเลย น่าจะราวๆ 2016-2017 ในขณะที่ OpenSSH (7.8) มีการเปลี่ยนแปลงเรื่องเยอะ โดยส่วนนึงเรื่อง Format PRIVATE KEY ลองถาม Google มัน

ถ้าตรวจเทียบ openssh-release-7.8 กับ What's new in OpenSSH 7.8(Packt) ก็ตรงนะ
ใช้แล้วครับ ตัว Code jsch มันไม่ขยับตามครับ จบเลย
ทางแก้
📌 ใช้ OpenSSH < 7.8 Generate Key มาให้ก่อน
📌 หรือ แก้ Code ขยับ Lib ไปใช้ตัวอื่น ที่ผมดูๆมามีของ
ส่วน dotnet ผมใช้ตัว https://github.com/sshnet/SSH.NET รอดครับ ไม่เกิดปัญหา
Reference
- https://stackoverflow.com/questions/53134212/invalid-privatekey-when-using-jsch
- https://github.com/apache/mina-sshd
- Still throws JSchException: invalid privatekey · Issue #12 · mwiede/jsch
- https://www.openssh.com/txt/release-7.8
- https://youtrack.jetbrains.com/issue/IJPL-64065/SSH-tunnel-com.jcraft.jsch.JSchException-invalid-privatekey-WITH-SOLUTION
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.



