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

标签 java ssh coldfusion sftp jsch

在我的 ColdFusion 应用程序中,我使用 Java 库 JSch。 SFTP 服务器是 BitVise 个人版(用于测试目的)。目前,我正在强制使用 StrictHostKeyChecking ,为此我使用以下方法从文件名创建主机 key 存储库。

public void setKnownHosts(String filename)
                   throws JSchException

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

示例公钥引用(如果需要):

localhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCktHvR7qZv+HVOjpALTETAe9uvGsaOlqF/xGKqgOk8eEloz+3ZItjFIyHxosiQvM4NFkciAsALpWyQwCWDrF8CaAmGJv8p4nY6u2pDaMhSCcFYU/dUOSV26sc2hrALsZhu3OYG3+K1L5QGRDYQ8OVzAXf16i5sITFAS4eArmtRHHrATPyreZdA52GMl7GrHjbDToTmUsV2rPAg+ASasAS/se4QK6UGTMeWG2A9JrilcAmWl/DSfLjJclaoZz1gg8bfCqaDEf1iUWkJIOtpyt08LoQZLxXSFlcKYa/6dICFZW9E2YrAxHMOhyZpEXIf/iA79EX8aHNayVkDOh42MlX+CyB3l3thzAO0g+nAjKLoJN8KyJ9ioymQdyxnGLA8m2E+UnQ9OOznJ6ZzopnlSPQ2rygAGOW2TCHYFh+91S0=

最佳答案

实现您自己的HostKeyRepository interface在某种程度上,check method将从 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 将您的实现与 session 关联起来.

关于java - 使用 JSch 库中的服务器指纹而不是设置公钥文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429132/

相关文章:

java - 从 JDialog 按钮刷新 JFrame 并刷新表

java - 如果包装器使用拆箱,需要什么 intValue() 方法?

linux - Windows 到 Linux(Rsync 和 SSH)

multithreading - 复制 ColdFusion session ,以便线程在注销后继续运行

java - 在 Wicket 7 中打开多个选项卡时文件上传时出现 "Could not deserialize object from byte[]"

java - 如何在hibernate中设置第n页的权限和子权限?

amazon-web-services - Ansible + AWS EC2 插件 + 用户名 + 动态 list 文件上的 ssh key

linux - 同时登录SSH两次

coldfusion - Coldfusion 的 HMVC 框架?

validation - ColdFusion CFIF