我试图从我创建的.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);
有没有人经历这件事?
对不起,缺少评论,因为我仍然在弄清楚如何使这个工作,我没有添加任何评论呢。
在此先感谢您提供任何有用的信息。
干杯 阿明
嗨Omikron。非常感谢您的反馈。我只是对可以使用的字符串/字节pubkey/passphrase params感到困惑。由于某些原因,我很困惑。在开始时,我总是收到一些奇怪的错误,可能是我把错误的用户当作字符串。无论如何,非常感谢您的反馈。有了这一切,现在正在工作。干杯 – ArBei