SSH Connection mit RSA private key File

bank24

Grünschnabel
Hi,

ich stehe vor folgendem Problem:

ich möchte mich an einem SSH Server anmelden/authentifizieren. Normalerweise mache ich das über putty und habe folgende Key Datei:

rsa_key.ppk


PuTTY-User-Key-File-2: ssh-rsa
Encryption: aes256-cbc
Comment: bla bla bla
Public-Lines: 6
AAAAB3NzaC1yc2EAAAABJQAAAQEArlpO1lNbZUOikx1JlKpYuXiEw3+wPGpiZcrW
[...]
==
Private-Lines: 14
uryHhizmvmqOzLSIdZCjtEtw0ridpTL1gLLlbV3Ld9GEkh75DT79e9kWS46yfhOK
[...]
Private-MAC: 94d3abd2089de55368658ac29ec155b5120244a7



Meine Keyfile enthält also den public UND den private Key.

Mein Code zur Authentifizerung ist folgender:

Code:
SshClient sshClient = new SshClient();
		sshClient.setSocketTimeout(1000);
		SshConnectionProperties properties = new SshConnectionProperties();
		properties.setHost("127.0.0.1");
		properties.setUsername("zimtstern");

		
		
          PublicKeyAuthenticationClient pk = new PublicKeyAuthenticationClient();
          pk.setUsername("zimtstern");
          
          // Private Key File
          SshPrivateKeyFile file = SshPrivateKeyFile.parse(new File("C:\\pfad\\zum\\key\\rsa_key.ppk"));
          SshPrivateKey key = file.toPrivateKey("");
          
          pk.setKey(key);

          if (sshClient.authenticate(pk) == AuthenticationProtocolState.COMPLETE) {
              System.out.println("drin");
          }

folgenden Error bekomme ich:
Code:
INFO: Private key is not in the default format, attempting parse with other supported formats
Exception in thread "main" com.sshtools.j2ssh.transport.publickey.InvalidSshKeyException: The key format is not a supported format

Arbeiten tue ich mit folgender Library: j2ssh-0.2.9-bin.tar.gz habt ihr evtl ne bessere ? javadocs ressources gibts leider garkeine^^

Demnach stimmt also mein Format nicht.

Hat da einer ne Idee wie das Format aussehen muss ?

und noch eine Frage hätte ich:

Mein key ist ja verschlüsselt mit "Encryption: aes256-cbc", das passwort habe ich natürlich für die Keyfile. Aber wo kann ich das passwort dann eingeben ?

Viele Grüße
bank24
 
Zuletzt bearbeitet:
Hi,

soweit ich weiß kann Java von Haus aus nicht mit den .ppk Dateien umgehen, da (wie die Exception andeutet) es das Format nicht kennt. Wandle daher die .ppk Datei mit putygen in das OpenSSH-Format um, dann sollte es keine Probleme geben.

Falls dein Key mit einem Passwort gesichert ist, hilft dir diese Seite vielleicht weiter. Hierfür müsstest du zwar JSch als Bibliothek hermehmen, ich denke aber das dürfte kein größeres Problem sein, oder?

Gruß
BK
 
Hi Bratkartoffel,

danke für dene schnelle Antwort. Soweit war ich jetzt mit google auch schon.

Diesen "converter" habe ich leider nicht. ich habe mir einfach mit ssh-keygen ein schlüsselpaar erzeugt und mir angeschaut. mit copy paste einfach den verschlüsselten key in die andere vorlage kopiert...

jetzt stehe ich vorm nächsten kleinen Problem:
wie zum bekomme ich den public key mit in die UserAuth rein ?

in diesem beispiel http://www.jcraft.com/jsch/examples/UserAuthPubKey.java

wird nur mit nem privat key gearbeitet...

die authentifizierung an meinem server schlägt jetzt immer fehl, weil dieser andere key noch fehlt.

in deinem beispiel bratkartoffel wird sogar ein public key gesetzt, allerdings so:

jSch.addIdentity(
"myusername", // String userName
prvkey, // byte[] privateKey
null, // byte[] publicKey
emptyPassPhrase // byte[] passPhrase
);


mh ok vll funktionierts ja, wenn ich anstatt "null" da einfach genau wie bei prvkey den public key reinklatsch.

falls es nicht geht meld ich mich wieder.

danke bratkartoffel für den code snippet. denke ich sollte es hinbekommen.
 
Hi,

der public Key muss dem Client gar nicht bekannt sein, den kann man sich auch über den private Key ausrechnen (soweit ich weiß). Der public Key muss aber auf dem Server hinterlegt sein, normalerweise unter ~/.ssh/authorized_keys damit der Server weiß dass der Key OK ist.

Wenn du den key mit dem tool "ssh-keygen" erzeugst, dann kommen da zwei Dateien raus:
- id_rsa - Der private Key
- id_rsa.pub - Der public Key

Da du allerdings nur eine .ppk Datei hast, hast du diese entweder mit puttygen erstellt oder einen OpenSSH-Key importiert und umgewandelt gespeichert. Puttygen ist frei und gibts auf der selben Seite wie putty zum Download (Putty Homepage)

Gruß
BK
 
thx es hat geklappt.

habe mit der puttgen.exe welche im selben verzeichnis wie die putty.exe liegt einfach eine open ssh key file erstellt. das java prog frägt dann nach dem passphrase and it works :)
 
So nächstes problem jungs :)

habe ca 2h google suche hinter mir.

wir schicke ich da jetzt nen Befehl ab ?

habe schon 2 varianten probiert:

1.

Java:
   InputStream in=channel.getInputStream();
      OutputStream out =channel.getOutputStream();
      

      channel.connect();
     
      
      out.write(("rm del.txt").getBytes());
      out.write(("\n").getBytes());
      out.flush();

2.
Java:
  /* System.out.println("Connected");
      String command1="touch txtfile.txt";
      Channel channel=session.openChannel("exec");
      
      
      
      ((ChannelExec)channel).setCommand(command1);
      channel.setInputStream(null);
      ((ChannelExec)channel).setErrStream(System.err);

      InputStream in=channel.getInputStream();
      channel.connect();
      byte[] tmp=new byte[1024];
      while(true){
         while(in.available()>0){
            int i = in.read(tmp, 0, 1024);
            if (i<0) break;
            System.out.print(new String(tmp, 0, i));
         }
         if (channel.isClosed()) {
            System.out.println("exit-status: "+channel.getExitStatus());
            break;
         }
         try{Thread.sleep(1000);}catch(Exception ee){}
      }
      channel.disconnect();
      session.disconnect();
      System.out.println("DONE");
   }catch(Exception e){
      e.printStackTrace();
   }
     
    }*/

beide laufen einfach durch, aber auf dem Zielsystem ist die Datei immer noch. auch wenn ich für das Command "touch test.txt" einfüge klappt nichts.

hat einer von euch zufällig nen code snippet da ?

connection zum sshserver ist hergestellt.
 
Zurück