我們從webMethods
服務器上運行JSch
。 當我們嘗試連接到我們的某個合作伙伴時,升級到新版本後,它會掛起連接步驟。
此處提出的解決方案尚未運行。我已經收到此錯誤:
com.jcraft.jsch.JSchException:驗證失敗
我注意到我們正在試圖連接到被詢問用戶名和密碼前,連接服務器完成:
[[email protected] sftpTest]$ /opt/sag/95/sitcore/jvm/jvm/bin/java -jar
SftpConnect.jar
Password has been set
Timeout has been set
Kerberos username [sagtest]:
Kerberos password for sagtest:
Connected
Channel opened
Connected
Session: iui-bpjobs01.itservices.lan:22:bp-xfer-int:1738666864
Kerberos
用戶和密碼不應該在那裏。
後小調查,我發現這個網頁: Skipping Kerberos authentication prompts with JSch
設置PreferredAuthentications
到其他值之後 - 都一直工作正常。我已經添加的代碼:
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
下面是完整的例子,我已經得到了 - 也許這將幫助別人來調試您的問題:
public static void main (String[] args){
String serverport = "22";
String serverhost = "XXXX";
String username = "YYYY";
String password = "ZZZZZ";
int timeout = 5000;
try{
int port = 22;
String sessionkey = null;
if(serverport != null && !serverport.trim().equals(""))
port = Integer.parseInt(serverport);
JSch jsch=new JSch();
Session session=jsch.getSession(username, serverhost, port);
jsch.setKnownHosts(System.getProperty("user.home")+"/.ssh/known_hosts");
session.setPassword(password);
System.out.println("Password has been set");
if(timeout > 0){
session.setTimeout(timeout);
System.out.println("Timeout has been set");
}
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
System.out.println("Added PreferredAuthentications");
session.connect();
System.out.println("Connected");
Channel channel = session.openChannel("sftp");
System.out.println("Channel opened");
channel.connect();
System.out.println("Connected");
if (channel.isConnected()){
sessionkey = serverhost + ":" + serverport + ":" + username + ":" + Thread.currentThread().hashCode();
}
System.out.println("Session: "+sessionkey);
}catch(Exception e){
e.printStackTrace();
}
}
沒有'其他港口'。端口22是SSH端口。港口21當然不是。 – EJP
我知道沒有其他港口。我的問題是,我期待它拋出一個異常。但它只是掛在session.connect() – aeycee