我正在尝试使用Jsch在Java语言中建立一个SSH连接。我的代码产生了以下异常:
com.jcraft.jsch.JSchException: UnknownHostKey: mywebsite.com.
RSA key fingerprint is 22:fb:ee:fe:18:cd:aa:9a:9c:78:89:9f:b4:78:75:b4
我在Jsch文档中找不到如何验证主机密钥。我已经在下面包含了我的代码。
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class ssh {
public static void main(String[] arg) {
try {
JSch jsch = new JSch();
//create SSH connection
String host = "mywebsite.com";
String user = "username";
String password = "123456";
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
session.connect();
} catch(Exception e) {
System.out.println(e);
}
}
}
发布于 2012-12-24 19:13:52
避免主机密钥检查是一种安全风险。
JSch使用HostKeyRepository接口和它的默认实现KnownHosts类来管理这一点。您可以通过实现HostKeyRepository来提供允许特定键的替代实现。或者,您可以将希望允许的密钥保存在known_hosts format中的文件中,然后调用
jsch.setKnownHosts(knownHostsFileName);
或者使用公钥字符串,如下所示。
String knownHostPublicKey = "mysite.com ecdsa-sha2-nistp256 AAAAE............/3vplY";
jsch.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));
有关更多详细信息,请参阅Javadoc。
这将是一个更安全的解决方案。
Jsch是开源的,您可以从here下载源代码。在examples文件夹中,查找KnownHosts.java以了解更多详细信息。
发布于 2012-12-25 02:41:10
根据用于ssh的程序的不同,获取适当密钥的方法可能会有所不同。Putty (在Windows中很流行)使用自己的ssh密钥格式。在我所见过的大多数Linux和BSD的变种中,你只需要看看~/.ssh/known_hosts
。我通常从Linux机器上ssh,然后将这个文件复制到Windows机器上。然后,我使用类似于
jsch.setKnownHosts("C:\\Users\\cabbott\\known_hosts");
假设我已经将该文件放在我的Windows机上的C:\Users\cabbott
中。如果您不能访问Linux机器,可以尝试http://www.cygwin.com/
也许其他人可以推荐另一种Windows替代方案。我发现putty通过以非标准格式将SSH键存储在注册表中来处理SSH键的方式,提取起来很麻烦。
发布于 2015-09-04 20:16:01
提供主机的公共rsa密钥:-
String knownHostPublicKey = "mywebsite.com ssh-rsa AAAAB3NzaC1.....XL4Jpmp/";
session.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));
https://stackoverflow.com/questions/2003419
复制相似问题