我正在尝试从我创建的.keystore文件中获取私钥。
到目前为止,这是有效的:
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),我得到以下输出:
-----开始RSA私钥-----
私人密钥在这里
----- END RSA私钥-----
我现在想使用这个私钥来创建一个到Unix服务器的ssh连接。在unix服务器端,我已经将公钥放入authorized_key文件中。
对于ssh连接,我使用JSch。 根据{{3}}我现在需要将此密钥转换为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);
有没有人经历过这个?
对于遗失的评论感到抱歉,因为我仍然在想如何让这个工作起来我还没有添加任何评论。
提前感谢任何有用的输入。
干杯 阿明
答案 0 :(得分:3)
在jsch文档中没有这个内容吗?
参数是:
JSch.addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase)
在你的情况下(未加密的PEM):
jsch.addIdentity(user, privateKeyPEM, null, null);