首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >com.jcraft.jsch.JSchException: UnknownHostKey

com.jcraft.jsch.JSchException: UnknownHostKey
EN

Stack Overflow用户
提问于 2010-01-05 08:45:32
回答 8查看 214.4K关注 0票数 198

我正在尝试使用Jsch在Java语言中建立一个SSH连接。我的代码产生了以下异常:

代码语言:javascript
运行
复制
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文档中找不到如何验证主机密钥。我已经在下面包含了我的代码。

代码语言:javascript
运行
复制
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);
        } 
    }
}
EN

回答 8

Stack Overflow用户

发布于 2012-12-24 19:13:52

避免主机密钥检查是一种安全风险。

JSch使用HostKeyRepository接口和它的默认实现KnownHosts类来管理这一点。您可以通过实现HostKeyRepository来提供允许特定键的替代实现。或者,您可以将希望允许的密钥保存在known_hosts format中的文件中,然后调用

代码语言:javascript
运行
复制
jsch.setKnownHosts(knownHostsFileName);

或者使用公钥字符串,如下所示。

代码语言:javascript
运行
复制
String knownHostPublicKey = "mysite.com ecdsa-sha2-nistp256 AAAAE............/3vplY";
jsch.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));

有关更多详细信息,请参阅Javadoc

这将是一个更安全的解决方案。

Jsch是开源的,您可以从here下载源代码。在examples文件夹中,查找KnownHosts.java以了解更多详细信息。

票数 44
EN

Stack Overflow用户

发布于 2012-12-25 02:41:10

根据用于ssh的程序的不同,获取适当密钥的方法可能会有所不同。Putty (在Windows中很流行)使用自己的ssh密钥格式。在我所见过的大多数Linux和BSD的变种中,你只需要看看~/.ssh/known_hosts。我通常从Linux机器上ssh,然后将这个文件复制到Windows机器上。然后,我使用类似于

代码语言:javascript
运行
复制
jsch.setKnownHosts("C:\\Users\\cabbott\\known_hosts");

假设我已经将该文件放在我的Windows机上的C:\Users\cabbott中。如果您不能访问Linux机器,可以尝试http://www.cygwin.com/

也许其他人可以推荐另一种Windows替代方案。我发现putty通过以非标准格式将SSH键存储在注册表中来处理SSH键的方式,提取起来很麻烦。

票数 17
EN

Stack Overflow用户

发布于 2015-09-04 20:16:01

提供主机的公共rsa密钥:-

代码语言:javascript
运行
复制
String knownHostPublicKey = "mywebsite.com ssh-rsa AAAAB3NzaC1.....XL4Jpmp/";

session.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2003419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档