在JAVA中生成RSA秘鑰對實現SSH互信


一開始參考的http://blog.csdn.net/wangqiuyun/article/details/42143957這篇文章,后來發現文中使用的是java.security.KeyPair,生成的秘鑰對不符合互信的要求。 於是換用com.jcraft.jsch.JSch,官網是http://www.jcraft.com/jsch/,也可以通過maven引入。具體代碼如下
public static Map<String, String> getKeyMap(String comment) {
Map<String,String> keys = new HashMap<>();
int type = KeyPair.RSA;
JSch jsch = new JSch();
try {
KeyPair kpair = KeyPair.genKeyPair(jsch, type);
//私鑰
ByteArrayOutputStream baos = new ByteArrayOutputStream();//向OutPutStream中寫入
kpair.writePrivateKey(baos);
String privateKeyString = baos.toString();
//公鑰
baos = new ByteArrayOutputStream();
kpair.writePublicKey(baos, comment);
String publicKeyString = baos.toString();
System.out.println("Finger print: " + kpair.getFingerPrint());
kpair.dispose();
// 得到公鑰字符串
//String publicKeyString = RSAEncrypt.loadPublicKeyByFile(filePath,filename + ".pub");
//System.out.println(publicKeyString.length());
System.out.println(publicKeyString);
keys.put("publicKey", publicKeyString);
// 得到私鑰字符串
//String privateKeyString = RSAEncrypt.loadPrivateKeyByFile(filePath,filename);
//System.out.println(privateKeyString.length());
System.out.println(privateKeyString);
keys.put("privateKey", privateKeyString);
} catch (Exception e) {
System.out.println(e);
}
return keys;
}


分析兩者生成的秘鑰對的區別,在於jsch生成的私鑰有另起一行的“-----BEGIN RSA PRIVATE KEY-----”開頭和“-----END RSA PRIVATE KEY-----”結尾,並且正文部分每隔64個字符換行一次。
而公鑰則多了“ssh-rsa ”開頭,並且在結尾部分可以添加注釋。
接下來開始做互信。
在機器A上上傳剛才生成的秘鑰對:

在命令行中操作

妥了。
===================================================
20160531 如果使用的秘鑰對名字不是id_rsa,e.g.:tunnel_rsa。 在做完互信之后登陸時需要使用如下命令:[root@localhost .ssh]# ssh 'root@192.168.138.132' -i tunnel_rsa。 這是因為id_rsa是默認的名字,如果使用其他名字則需要指定。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com