当前位置: 首页 > 知识库问答 >
问题:

在JSch库中使用服务器的指纹而不是设置公钥文件

傅砚
2023-03-14

在我的ColdFusion应用程序中,我使用了Java库jsch。SFTP服务器是BitVise个人版(用于测试)。当前,我正在强制使用stricthostkeychecking,为此,我使用下面的方法从文件名创建一个主机密钥存储库。

public void setKnownHosts(String filename)
                   throws JSchException

有没有办法设置服务器的指纹(像2b:16:18:83:7b:c6:5e:49:f2:f0:8e:e2:dc:64:da:1a)而不是使用JSch库中的公钥?

publickey引用示例,以备需要:

本地主机ssh-rsa AAAAB3NZAC1YC2EAAAADAQABAAABGQQCKTHVR7QZV+HVOJPALTETAE9UVGSAOLQF/XGKQGOK8EELOZ+3ZITJFIYHXOSIQVM4NFKCIASALPWYQWCWDRF8CAAMGJV8P4NY6U2PDAMHSCCCYU/DUOSV26SC2HRALSZHU3OYG3+K1L5QGRDYQ8OVZAXF16I5SITFAS4EARMTRHHRATPYREZDA52GML7GRHJBDTOTMUSV2RPAG+ASASAS/SE4QK6UGTME WG2A9JRILCAMWL/DSFLJJCLAOZZ1GG8BFCQADEF1IUWKJIOTPYT08LOQZLXXSFLCKY/6DICFZW9E2YRAXHMOHYZPEXIF/IA79EX8AHNAYVKDOH42MLX+CYB3L3THZAO0G+NAJKLOJN8KYJ9IOYMQDYXNGLA8M2E+UNQ9OOZNJ6ZZOPNLSPQ2RYGAGOW2TCHYFH+91S0=

共有1个答案

杜俊爽
2023-03-14

实现您自己的HostKeyRepository接口,使Check方法将从Key参数计算的指纹与您已知的指纹进行比较。

public class HostKeyFingerprintRepository implements HostKeyRepository
{
    int check(String host, byte[] key)
    {
        // Based on KeyExchange.getFingerPrint
        Class c = Class.forName(jsch.getConfig("md5"));
        HASH hash = (HASH)(c.newInstance());
        // Based on Util.getFingerPrint
        hash.init();
        hash.update(key, 0, key.length);
        byte[] foo=hash.digest();
        StringBuffer sb=new StringBuffer();
        int bar;
        for(int i=0; i<foo.length;i++){
          bar=foo[i]&0xff;
          sb.append(chars[(bar>>>4)&0xf]);
          sb.append(chars[(bar)&0xf]);
          if(i+1<foo.length)
            sb.append(":");
        }
        String fingerprint = sb.toString();
        if (fingerprint.equals("2b:16:18:83:7b:c6:5e:49:f2:f0:8e:e2:dc:64:da:1a"))
        {
            return OK;
        }
        else
        {
            return NOT_INCLUDED;
        }
    } 

    // dummy implementations of the other methods
}

使用session.setHostKeyRepository将您的实现与会话相关联。

 类似资料:
  • 我们必须通过配置用户名、密码和公钥,使用代理服务器internet.ford.com从应用程序连接到外部SFTP服务器。 预期与外部SFTP服务器的连接成功。

  • 问题内容: 我正在尝试了解采取OpenSSH公钥的步骤,如下所示: SSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAQEAqmEmDTNBC6O8HGCdu0MZ9zLCivDsYSttrrmlq87 / YsEBpvwUTiF3UEQuFLaq5Gm + dtgxJewg / UwsZrDFxzpQhCHB6VmqrbKN2hEIkk / HJvCnAmR1ehXv8n2BWw

  • 我有一个EVP_PKEY结构中的RSA公钥(从PEM文件加载,以------开始公钥------)。现在,我希望能够使用OpenSSL API显示代码中该密钥的指纹。(目的是允许操作员在信任JWT之前使用RS256验证其密钥)。 不幸的是,到目前为止,我发现的所有资源要么在命令行上使用ssh-keygen,要么使用X.509证书的指纹,但不使用公钥。 那么,如何使用OpenSSL API获取存储在

  • 问题内容: 我正在使用jsch从服务器下载文件,下面是我的代码。 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2629) at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:977) at com.jcraft.jsch.ChannelSftp.get(Channe

  • 我试图设置Spring引导云配置服务器与ssh私钥文件和获取:ucom.jcraft.jsch.JSchExc0019: USERAUTH失败我的application.properties文件: 我得到了。 我怀疑这是由于钥匙放错了。如何把ssh键Spring启动application.properties文件?

  • 我们正在尝试使用JSCH从远程服务器下载文件。尝试时,两台服务器之间已经建立了SFTP密钥交换 它在不要求任何密码的情况下成功连接。但在java代码中,当我们尝试使用JSCH连接时,会出现无效私钥异常。 我所做的代码如下所示 编辑: im使用的JSCH版本是0.1.54 私钥的开头就像 我甚至尝试将私钥转换为openssh格式,但遇到了一些异常 如果我从命令中删除-f,它会工作,但我相信该文件没有