我试图使用Java通过SSH连接到第3层交换机,并运行一些命令,并使用JSch库(jsch-0.1.54.jar)接收响应。

它对于某些开关工作正常,而在其他开关上则抛出错误。
我正在测试的所有开关都使用与下面相似的代码。

String host="X.X.X.X";
String user="AAA";
String password="PPP";

JSch js = new JSch();
Session session=js.getSession(user, host, 22);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();


我收到以下错误

com.jcraft.jsch.JSchException: SSH_MSG_DISCONNECT: 2 Protocol error: expected packet type 30, got 34
    at com.jcraft.jsch.Session.read(Session.java:1004)
    at com.jcraft.jsch.Session.connect(Session.java:323)

最佳答案

看起来像是SSH服务器中的错误。

无论如何,数据包类型34是SSH_MSG_KEX_DH_GEX_REQUEST。尝试禁用“ diffie-hellman” KEX,以防止JSch尝试使用它。

config.put("kex", "ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521");




如果这样做没有帮助,请发布JSch log file

关于java - 通过JSch连接到服务-预期的数据包类型30,得到34,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50653952/

10-10 16:54