Столкновение с com.sshtools.j2ssh.transport.TransportProtocolException для плагина j2ssh
Как я узнал, LeeDavidPainter является автором плагина j2ssh. Я хотел задать вопрос, в котором я застрял. Я пытаюсь подключиться к системе с помощью плагина j2ssh, используя только IP и пароль. Я вижу этот след стека:
INFO: Loading key exchange methods
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.publickey.SshKeyPairFactory <clinit>
INFO: Loading public key algorithms
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.compression.SshCompressionFactory <clinit>
INFO: Loading compression methods
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.hmac.SshHmacFactory <clinit>
INFO: Loading message authentication methods
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.TransportProtocolCommon startTransportProtocol
INFO: Starting transport protocol
Mar 09, 2016 5:23:05 PM com.sshtools.j2ssh.transport.TransportProtocolCommon run
INFO: Registering transport protocol messages with inputstream
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon negotiateVersion
INFO: Negotiating protocol version
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon negotiateVersion
INFO: Protocol negotiation complete
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon sendMessage
INFO: Sending SSH_MSG_KEX_INIT
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon startBinaryPacketProtocol
INFO: Received SSH_MSG_KEX_INIT
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon beginKeyExchange
INFO: Starting key exchange
Mar 09, 2016 5:23:06 PM com.sshtools.j2ssh.transport.TransportProtocolCommon sendMessage
INFO: Sending SSH_MSG_DISCONNECT
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 checkThat.connect(checkThat.java:34)
at checkThat.main(checkThat.java:19)
Я видел один из его постов, в котором он сказал, что он устарел, и я мог бы использовать новый плагин, который вы - J2SSH Maverick.
Но когда я использовал это, я вижу, что методы, которые я использую здесь, не совместимы с новым плагином. Так что я должен изменить методы, а также. Я покажу свой код, а также ниже.
import java.io.IOException;
import java.util.List;
import com.sshtools.j2ssh.SshClient;
import com.sshtools.j2ssh.authentication.AuthenticationProtocolState;
import com.sshtools.j2ssh.authentication.KBIAuthenticationClient;
import com.sshtools.j2ssh.authentication.PasswordAuthenticationClient;
import com.sshtools.j2ssh.transport.IgnoreHostKeyVerification;
public class checkThat {
public static void main(String s[])
{
try {
connect();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void connect() throws Exception {
try {
int result =-1;
String m_sUser= "user";
String m_sPassword="pswd";
SshClient ssh = new SshClient();
try{
ssh.connect("1.1.1.1", 22, new IgnoreHostKeyVerification());
}catch (IOException ie)
{
ie.printStackTrace();
}
//System.out.println( "Connect successful");
List authType = ssh.getAvailableAuthMethods(m_sUser);
if(!authType.isEmpty() && authType.contains("password"))
{
//m_logger.severe("FTSSH:Connected to host via password");
PasswordAuthenticationClient pwd = new PasswordAuthenticationClient();
pwd.setUsername(m_sUser);
pwd.setPassword(m_sPassword);
// Authenticate the user
result = ssh.authenticate(pwd);
}
else
{
//m_logger.severe("FTSSH:Connected to host via KBI");
KBIAuthenticationClient kbi = new KBIAuthenticationClient();
kbi.setUsername(m_sUser);
/*ASCKBIRequestHandler kbiHandler = new ASCKBIRequestHandler();
kbiHandler.setPassCode(m_sPassword);
kbi.setKBIRequestHandler(kbiHandler);*/
// Authenticate the user
result = ssh.authenticate(kbi);
}
/* Authenticate.
* If you get an IOException saying something like
* "Authentication method password not supported by the server at this stage."
*/
PasswordAuthenticationClient pwd = new PasswordAuthenticationClient();
pwd.setUsername("user");
pwd.setPassword("pswd");
result = ssh.authenticate(pwd);
if (result != AuthenticationProtocolState.COMPLETE){
throw new Exception("Login to failed");
}
/*session = ssh.openSessionChannel();
sor = new SessionOutputReader(session);
// Request a pseudo terminal, if you do not you may not see the prompt
session.requestPseudoTerminal("gogrid",80,48, 0 , 0, "");
// Start the users shell
session.startShell();*/
} catch (Exception e) {
//log.error(e.getMessage(), e);
System.out.println( e.getMessage());
e.printStackTrace();
throw new Exception("Login to failed");
}
}
}
Так что здесь, если я изменю файл.jar с j2ssh на j2ssh maverick, методы, такие как sshClient
, ignoreHostKeyVerification
, PasswordAuthenticationClient
и т. д. не разрешены.
В чем может быть проблема?
1 ответ
J2SSH API и J2SSH Maverick API - это разные продукты. Таким образом, вы не можете ожидать использования одного и того же исходного кода без его рефакторинга. Я уже упоминал, что API-интерфейсы похожи, они есть. Но, будучи полностью переписанным, Maverick API имеет улучшения / отличия, которые означают, что вам нужно будет взглянуть на прилагаемые примеры.
Я рекомендую вам взглянуть на пример PasswordConnect.java J2SSH Maverick.