Ugyldig privatnøgle ved brug af JSch
Jeg faldt også over dette problem. Running Jgit på mac , for nogle brugere så vi følgende undtagelse:
org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:160)
at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:137)
at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:274)
at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:169)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1236)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:234)
... 17 more
Caused by: com.jcraft.jsch.JSchException: invalid privatekey: [[email protected]
at com.jcraft.jsch.KeyPair.load(KeyPair.java:664)
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:367)
at org.eclipse.jgit.transport.JschConfigSessionFactory.getJSch(JschConfigSessionFactory.java:276)
at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:220)
at org.eclipse.jgit.transport.JschConfigSessionFactory.createSession(JschConfigSessionFactory.java:176)
at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:110)
Grundårsagen blev opdaget at være ssh private key mismatch. Undtagelsen skete kun for brugere med nøgle af nyere type ed25519 , som udsender denne nøgleoverskrift:
-----BEGIN OPENSSH PRIVATE KEY-----
i stedet for venlig RSA :
-----BEGIN RSA PRIVATE KEY-----
genskaber en RSA-nøgle (ssh-keygen -t rsa
), fik undtagelsen til at forsvinde.
Rediger følgende kommentarer:Hvis du har OpenSSH 7.8 og nyere, skal du muligvis tilføje -m PEM til generationskommandoen:ssh-keygen -t rsa -m PEM
Nylige versioner af OpenSSH (7.8 og nyere) genererer nøgler i ny OpenSSH-format som standard, som starter med:
-----BEGIN OPENSSH PRIVATE KEY-----
JSch understøtter ikke dette nøgleformat.
Du kan bruge ssh-keygen
for at konvertere nøglen til klassikeren OpenSSH-format:
ssh-keygen -p -f file -m pem -P passphrase -N passphrase
(hvis nøglen ikke er krypteret med en adgangssætning, brug ""
i stedet for passphrase
)
For Windows-brugere:Bemærk at ssh-keygen.exe
er nu indbygget i Windows 10. Og kan downloades fra Microsoft Win32-OpenSSH-projektet til ældre versioner af Windows.
På Windows kan du også bruge PuTTYgen (fra PuTTY-pakken):
- Start PuTTYgen
- Indlæs nøglen
- Gå til Konverteringer> Eksporter OpenSSH-nøgle .
For RSA-nøgler vil den bruge klassikeren format.
Hvis du opretter en ny nøgle med ssh-keygen
, tilføj bare -m PEM
for at generere den nye nøgle i klassikeren format:
ssh-keygen -m PEM