我正在尝试在远程服务器上运行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();