2016-04-03 14 views
0

公開鍵を取得するコードは次のとおりです。 Linuxのauthorized_keysファイルに公開鍵をOpenSSH形式に変換して追加する必要があります。どうやってやるの?公開鍵をOpenSSH authorized_keys形式に変換する

KeyPairGenerator kpGen = KeyPairGenerator.getInstance("DSA", "BC"); 
kpGen.initialize(1024, new SecureRandom()); 
KeyPair keypair = kpGen.generateKeyPair(); 

私はPEMWriterを使用しました。しかし、それは適切な形式で出力文字列を与えませんでした。別の質問のための

答えて

1

@gotoalberto's answer

あなたがプロセスを逆にしたい場合は、すなわちLinuxのauthorized_keysエントリフォーマットにPublicKey Javaオブジェクト をエンコードし、1は、このコードを使用することができます

/** 
* Encode PublicKey (DSA or RSA encoded) to authorized_keys like string 
* 
* @param publicKey DSA or RSA encoded 
* @param user username for output authorized_keys like string 
* @return authorized_keys like string 
* @throws IOException 
*/ 
public static String encodePublicKey(PublicKey publicKey, String user) 
     throws IOException { 
    String publicKeyEncoded; 
    if(publicKey.getAlgorithm().equals("RSA")){ 
     RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey; 
     ByteArrayOutputStream byteOs = new ByteArrayOutputStream(); 
     DataOutputStream dos = new DataOutputStream(byteOs); 
     dos.writeInt("ssh-rsa".getBytes().length); 
     dos.write("ssh-rsa".getBytes()); 
     dos.writeInt(rsaPublicKey.getPublicExponent().toByteArray().length); 
     dos.write(rsaPublicKey.getPublicExponent().toByteArray()); 
     dos.writeInt(rsaPublicKey.getModulus().toByteArray().length); 
     dos.write(rsaPublicKey.getModulus().toByteArray()); 
     publicKeyEncoded = new String(
       Base64.encodeBase64(byteOs.toByteArray())); 
     return "ssh-rsa " + publicKeyEncoded + " " + user; 
    } 
    else if(publicKey.getAlgorithm().equals("DSA")){ 
     DSAPublicKey dsaPublicKey = (DSAPublicKey) publicKey; 
     DSAParams dsaParams = dsaPublicKey.getParams(); 

     ByteArrayOutputStream byteOs = new ByteArrayOutputStream(); 
     DataOutputStream dos = new DataOutputStream(byteOs); 
     dos.writeInt("ssh-dss".getBytes().length); 
     dos.write("ssh-dss".getBytes()); 
     dos.writeInt(dsaParams.getP().toByteArray().length); 
     dos.write(dsaParams.getP().toByteArray()); 
     dos.writeInt(dsaParams.getQ().toByteArray().length); 
     dos.write(dsaParams.getQ().toByteArray()); 
     dos.writeInt(dsaParams.getG().toByteArray().length); 
     dos.write(dsaParams.getG().toByteArray()); 
     dos.writeInt(dsaPublicKey.getY().toByteArray().length); 
     dos.write(dsaPublicKey.getY().toByteArray()); 
     publicKeyEncoded = new String(
       Base64.encodeBase64(byteOs.toByteArray())); 
     return "ssh-dss " + publicKeyEncoded + " " + user; 
    } 
    else{ 
     throw new IllegalArgumentException(
       "Unknown public key encoding: " + publicKey.getAlgorithm()); 
    } 
} 

@ gotoalbertoのコードは、RSAキーとDSAキーに対してのみ実装されています。他のキーが必要な場合は、自分でキーを追加する必要があります。

関連する問題