java – 私有/公钥认证的示例

参见英文答案 > SSHJ Example of Public Key Auth from File
1个

任何人都可以在 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");
}

翻译自:https://stackoverflow.com/questions/3686710/ssh-example-of-private-public-key-authentication

原文 

https://codeday.me/bug/20190112/508116.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » java – 私有/公钥认证的示例

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址