私钥/公钥认证的ssh示例

谁能给我sshj中的私钥/公钥身份验证示例?

在sshj中,等效的命令行是什么,

ssh -i /path/to/mykey.private username@host

我试过了(省略了错误处理),

final SSHClient ssh = new SSHClient();

ssh.loadKnownHosts();

ssh.connect("host");

ssh.authPublickey("username", "/path/to/mykey.private");

final Session session = ssh.startSession();

...

但在日志语句中,我看到了

DEBUG net.schmizz.sshj.SSHClient - Attempting to load key from: /path/to/mykey.private

WARN net.schmizz.sshj.SSHClient - Could not load keys due to: {}

net.schmizz.sshj.common.SSHException: No provider available forUnknown key file

at net.schmizz.sshj.SSHClient.loadKeys(SSHClient.java:482) ~[sshj-0.3.0.jar:na]

...

Exception in thread "main" 10:49:55.943 [reader] DEBUG

net.schmizz.sshj.transport.Reader - Stopping

net.schmizz.sshj.userauth.UserAuthException: Exhausted available authentication methods

谢谢

回答:

尝试KeyPairWrapper像这样使用:

KeyPair kp = ... // read keypair from file

ssh.authPublickey(user, new KeyPairWrapper(keypair));

使用BouncyCastle提供程序,您可以使用类似的方法从PKCS8 PEM(为混乱的代码道歉)中提取KeyPair。

/**

* Takes a PEM-encoded PKCS8 key-containing InputStream and returns the KeyPair within. Only the first keypair is considered

*

* @return

* @throws IOException if the stream is not a valid PKCS8 wrapped keypair

*/

public static KeyPair readKeypair(final InputStream is, final char[] password) throws IOException {

PasswordFinder passwordFinder = password != null ? new StaticPasswordFinder(password) : null;

KeyPair kp = null;

try {

// read the stream as a PEM encoded

try {

final PEMReader pem = new PEMReader(new InputStreamReader(is), passwordFinder);

try {

// Skip over entries in the file which are not KeyPairs

do {

final Object o = pem.readObject();

if (o == null)

break; // at end of file

else if (o instanceof KeyPair)

kp = (KeyPair) o;

} while (kp == null);

}

finally {

pem.close();

}

}

catch (EncryptionException e) {

throw new IOException("Error reading PEM stream: " + e.getMessage(), e);

}

}

finally {

is.close();

}

// Cast the return to a KeyPair (or, if there is no [valid] return, throw an exception)

if (kp != null)

return kp;

else

throw new IOException("Stream " + is + " did not contain a PKCS8 KeyPair");

}

以上是 私钥/公钥认证的ssh示例 的全部内容, 来源链接: utcz.com/qa/417203.html

回到顶部