我正在使用单线程应用程序连接我的客户端服务器体系结构。基本上,此应用程序将创建许多连接并在作业完成后自动将其关闭。我们正在例外
'com.sshtools.j2ssh.transport.TransportProtocolException:连接未完成'
我们已启用j2ssh日志以找出问题的根本原因。以下是有关此问题的完整详细信息。
Java版本:jdk1.6.0_11
使用的API:J2SSH Core 0.2.9(j2ssh-core-0.2.9.jar)
com.sshtools.j2ssh.transport.TransportProtocolException: The connection did not complete
at com.sshtools.j2ssh.transport.TransportProtocolClient.onStartTransportProtocol(Unknown Source)
at com.sshtools.j2ssh.transport.TransportProtocolCommon.startTransportProtocol(Unknown Source)
at com.sshtools.j2ssh.SshClient.connect(Unknown Source)
at com.sshtools.j2ssh.SshClient.connect(Unknown Source)
at com.sshtools.j2ssh.SshClient.connect(Unknown Source)
at info.itserv.globalinterface.gui.SFTP.openSSH(SFTP.java:95)
at info.itserv.globalinterface.gui.SFTP.connectionSFTP(SFTP.java:228)
........和以下代码
public void openSSH(String hostname, int authCode) {
try {
sshClient.connect(hostname,
new IgnoreHostKeyVerification());
sshClient.getConnectionProperties().setPort(this.port);
//Authenticate
GENERAL.println("Processing logging...");
switch (authCode) {
case 0:
this.login(this.username, this.password);
System.out.println("Password authentication");
break;
case 1:
//String keyFilename = "D:\\Cygwin\\home\\gtantot\\id_dsa";
this.loginCertificat(this.username, this.keyFilename,
this.passphrase);
System.out.println("Password authentication");
break;
default:
System.out.println("ECHEC SSH connection");
break;
}
this.sftp = sshClient.openSftpClient();
} catch (TransportProtocolException e) {
System.out.println("Transport: "+e.getMessage().toString() );
e.printStackTrace();
}
catch (IOException e1) {
System.out.println("Error openSSH: "+e1.getMessage());
e1.printStackTrace();
} }
public void closeSSH() {
if (sshClient != null) {
sshClient.disconnect();
}
}
有什么办法可以克服这个错误?
由于这种错误将导致应用程序的一个sftp会话
失败了,对此有什么解决方案?
最佳答案
如果发布了完整的日志,应该会有更多输出,是否将日志设置为DEBUG级别?
查看代码,当密钥交换期间出现问题时会发生此异常,也许您连接的服务器不支持旧J2SSH API支持的任何密钥交换算法。
您使用的J2SSH版本可能于2009年发布,但自2007年原始作者停止贡献以来,该API几乎没有投入任何工作。现在,许多服务器都禁用了较旧的,安全性较低的密钥交换,这很可能是导致问题的原因。
如果您想继续使用像API这样的J2SSH而不是JSch,则可以使用J2SSH Maverick的开源版本,该版本与J2SSH来自同一作者(即我)。
https://github.com/sshtools/j2ssh-maverick
关于java - J2ssh ssh客户端频繁断开连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29248448/