2017-02-14 69 views
0

我試圖從我創建的.keystore文件獲取私鑰。使用.keystore文件中的私有RSA密鑰與Jsch

到目前爲止,這是工作:

 try { 
     FileInputStream is = new FileInputStream("C:\\Program Files\\Java\\...mykeystore.keystore"); 

     KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
     keystore.load(is, "mypassword".toCharArray()); 
     Key privKey = keystore.getKey("alias", "mypassword".toCharArray()); 

     StringWriter stringWriter = new StringWriter(); 
     JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter); 
     pemWriter.writeObject(privKey); 
     pemWriter.close(); 
     System.out.println(stringWriter); 

對於的System.out.println(StringWriter的)我得到以下輸出:

----- BEGIN RSA私鑰--- -

私鑰這裏

----- END RSA私鑰-----

我現在想用這個私鑰創建一個到Unix服務器的ssh連接。在unix服務器端,我已經把公鑰放到了authorized_key文件中。

對於ssh連接,我使用JSch。 根據JSCH - Invalid private key,我現在需要將此密鑰轉換爲PEM格式。我用Abdelhameed Mahmoud的例子做了這件事:

 StringWriter stringWriter = new StringWriter(); 
     JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter); 
     pemWriter.writeObject(privKey); 
     pemWriter.close(); 
     System.out.println(stringWriter); 
     byte[] privateKeyPEM = stringWriter.toString().getBytes(); 

而這裏就是我卡住的地方。

如何使用privateKeyPEM字節對象? 我想用jsch.addIdentity()

但我真的不明白如何使用此byte [] privateKeyPEM變量來設置身份?

下面一個例子我JSch部分:

 JSch jsch = new JSch(); 
     jsch.addIdentity(**What to put here??**); 
     session = jsch.getSession(user, getIP(), getPort()); 
     session.setConfig("PreferredAuthentications", "publickey"); 
     //session.setPassword(pwd); 
     session.setConfig("StrictHostKeyChecking", "no"); 
     session.connect(3000); 

有沒有人經歷這件事?

對不起,缺少評論,因爲我仍然在弄清楚如何使這個工作,我沒有添加任何評論呢。

在此先感謝您提供任何有用的信息。

乾杯 阿明

回答

2

是在jsch文檔中沒有談到這個?

的參數是:

JSch.addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase) 

在你的情況(未加密的PEM):

jsch.addIdentity(user, privateKeyPEM, null, null); 
+0

嗨Omikron。非常感謝您的反饋。我只是對可以使用的字符串/字節pubkey/passphrase params感到困惑。由於某些原因,我很困惑。在開始時,我總是收到一些奇怪的錯誤,可能是我把錯誤的用戶當作字符串。無論如何,非常感謝您的反饋。有了這一切,現在正在工作。乾杯 – ArBei