尝试使用Java在远程UNIX服务器上执行脚本时出错

时间:2018-09-14 16:06:36

标签: java jsch

我正在尝试在远程服务器上运行kafka Shell脚本以检索使用者组和偏移量列表。这是一种替代方法,而不是通过jvm [jmx}使用http://openjdk.java.net/tools/svc/jconsole/jconsole。我正在使用jsch并收到未知的主机密钥错误。

从其他已发布的问题中可以找到解决方案,但是我不确定如何以及要检索哪个主机密钥。我可以在服务器上看到3个主机密钥服务器文件,但不确定要复制哪个文件。

这是代码和错误:

    JSch jsch = new JSch();
    String keyString = "";
    //byte [] key = Base64.getDecoder().decode("b6:83:60:7c:4a:98:00:ef:b9:4a:ba:b6:80:39:d6:42");
    //HostKey hostkey = new HostKey(host,key);
    //jsch.getHostKeyRepository().add(hostkey, null);

    jsch.setKnownHosts(new FileInputStream("C:\\Users\\.ssh\\host"));

    Session session = jsch.getSession(uname, host, 22);
    Properties config = new Properties();
    //config.put("StrickHostKeyChecking","no");
    session.setConfig(config);
    session.setPassword(pword);

    session.connect();

这是在session.connect()行上产生的错误:

com.jcraft.jsch.JSchException: UnknownHostKey: 192.168.xx.1xx. RSA key 
         fingerprint is b6:83:60:7c:4a:98:00:ef:b9:4a:ba:b6:80:39:d6:42

编辑:

使用从服务器复制到客户端的ssh_host_rsa_key.pub文件尝试了以下更改。添加了以下内容:

    JSch jsch = new JSch();
    String keyString = "";
    //byte [] key = 
     Base64.getDecoder().
         decode("b6:83:60:7c:4a:98:00:ef:b9:4a:ba:b6:80:39:d6:42");
    //HostKey hostkey = new HostKey(host,key);
    //jsch.getHostKeyRepository().add(hostkey, null);
     jsch.setKnownHosts("C:\\Users\\.ssh\\ssh_host_rsa_key.pub");

    Session session = jsch.getSession(uname, host, 22);
    Properties config = new Properties();
    session.setConfig(config);
    session.setPassword(pword);
    session.connect();

创建相同的JSchException错误:UnknownHostKey ... RSA密钥是fingerporint。然后尝试按照以下方式实际读取文件内容:

     String knownHostPublicKey = "";
     String readLine = "";
     BufferedReader fr = new BufferedReader(new 
            FileReader("C:\\Users\\.ssh\\ssh_host_rsa_key.pub"));
    while((readLine = fr.readLine()) != null){
        knownHostPublicKey = readLine;
        System.out.println(knownHostPublicKey);
    }

  //  jsch.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));

    session.connect();

0 个答案:

没有答案