Chúng tôi đang chạy JSch
từ webMethods
máy chủ. Sau khi nâng cấp lên phiên bản mới khi chúng tôi cố gắng kết nối với một trong các đối tác của chúng tôi, nó bị treo trên bước kết nối.
Giải pháp được đề xuất ở đây không hoạt động. Tôi đã nhận lỗi này:
com.jcraft.jsch.JSchException: Auth thất bại
tôi đã nhận thấy các máy chủ, chúng tôi đang cố gắng để kết nối với là yêu cầu cho người sử dụng và mật khẩu trước khi kết nối được được thực hiện:
[[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
Không được có người dùng và mật khẩu Kerberos
.
Sau khi điều tra nhỏ tôi đã tìm thấy trang này: Skipping Kerberos authentication prompts with JSch
Sau khi thiết lập PreferredAuthentications
với các giá trị khác - tất cả đã làm việc tốt. Mã mà tôi đã thêm:
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
Dưới đây là toàn bộ ví dụ mà tôi đã có - có thể nó sẽ giúp một ai đó để gỡ rối vấn đề của bạn:
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();
}
}
Không có 'cổng khác'. Cổng 22 là cổng SSH. Port 21 chắc chắn là không. – EJP
tôi biết không có cổng nào khác. Vấn đề của tôi là tôi đã mong đợi nó ném một ngoại lệ. Nhưng nó chỉ bị treo trong session.connect() – aeycee