Java >> Java tutorial >  >> Tag >> private

Ugyldig privatnøgle ved brug af JSch

Jeg faldt også over dette problem. Running Jgitmac , 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

Java tag