谁能给我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-keygen-t rsa”创建了一个没有密码的公钥,我打算将其用于github,但我错误地发送了公钥和私钥...... 这到底意味着什么?
我创建了一个小型vertx auth服务器,它使用公钥/私钥签名/生成JWT令牌。 现在,当我从客户端访问/api/new token时,我从上面的身份验证服务器获得了一个JWT令牌。然而,我有一些悬而未决的问题: auth-server如何确保客户端具有服务器公钥并且它是真实的? 客户端如何向auth-server发送公钥? 我怎样才能让 /api/new-token安全,只有合法的客户端可以连
我正在尝试使用openssl生成一个安全的私钥和公钥,以便与我的云托管提供商一起使用,但当我这样做时,openssl的公钥输出未被识别。 生成RSA私钥后,2048位长模,然后 它编写了RSA公钥。输出如下所示: 这是标准格式,它非常适合其他用途,但所有云和托管服务提供商都需要这样的公钥: 这是他们识别的唯一有效格式。 我知道ssh-keygen可以轻松完成所有这些,但我正在使用当前最新的open
通常情况下,访问远程服务器上的 Git 仓库要受到限制。你可能不希望任何人都能读取文件,或者至少不能改动文件吧。在这种情况下,进行有效的认证就是非常必要地。 你可能已经通过你所使用的浏览器了解了 “HTTPS” 协议,尽管它使用起来很简单,但是很多系统管理员还是会出于各种原因去选择使用更为普遍的 “SSH” 协议。在这种协议之下,当涉及到身份验证时,你就很可能需要 “SSH公钥”。 对于这种类型的
Auth0提供了两个JWT库,一个用于Node:Node jsonwebtoken,另一个用于Java:Java JWT。事实证明,JavaJWT不支持公钥/私钥对。 然而,另一个java库jjwt库声称支持该特性。但是,该文档没有显示如何在jjwt中使用自己的公钥/私钥对。 我创建了私有/公钥对,并在Node中成功地使用了node-jsonwebToken: 但是我发现在Java中用JWT无法做
我试图理解使用带有私钥/公钥(RS512)的JSON Web令牌的逻辑,当将从客户端(在本例中是React Native App)发送到服务器的数据有效载荷签名时。 我认为私钥/公钥的全部意义在于将私钥保持为私钥(在我的服务器上),并将公钥交给成功登录应用程序的人。 我认为,对于我的服务器的每个API请求,经过身份验证的应用程序用户将使用公钥创建JWT(在客户端),服务器将使用私钥验证来自API请