【发布时间】:2017-02-24 15:00:13
【问题描述】:
我有下面的代码来 SFTP 到一个位置
public static void putFile(String username, String host, String password, String remotefile, String localfile){
JSch jsch = new JSch();
Session session = null;
try {
session = jsch.getSession(username, host, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.put(localfile, remotefile);
sftpChannel.exit();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
}
我可以使用上面的代码从我的本地机器上 SFTP 文档。但是,当我尝试从不同的环境到 SFTP 到同一位置时,我收到了以下错误。
com.jcraft.jsch.JSchException: 服务器的版本字符串无效 at
com.jcraft.jsch.Session.connect(Session.java:253)
注意:我使用的是 jsch-0.1.31.jar 文件。
在打印出session.getClientVersion() 时,我得到“SSH-2.0-JSCH-0.1.31”。
我尝试将 jar 文件升级到 jsch-0.1.51.jar 然后 session.getClientVersion() = "SSH-1.5-JSCH-0.1.51" 我出现以下错误
com.jcraft.jsch.JSchException: Session.connect: java.net.SocketException: Connection reset at com.jcraft.jsch.Session.connect(Session.java:558)
请您帮助我了解我应该查看哪些参数以及是什么导致它从我的本地计算机运行并上传到相同的 SFTP 位置而不是从其他环境?
【问题讨论】:
-
您的问题出在您要连接的 ssh 服务器上。首先它发送了一个 Jsch 不喜欢的服务器版本,现在它正在关闭您的客户端建立的 TCP 连接。服务器上正在运行什么操作系统?它正在运行什么 SSH 服务器软件?这个服务器软件是什么版本的?
-
在“不同环境”连接失败的同时,是否可以从本地机器连接? “不同的环境”究竟意味着什么?位置不同?包括一些日志文件,例如使用任何 GUI SFTP 客户端。服务器的日志也会有所帮助,至少可以查看来自“不同环境”的连接尝试是否完全到达服务器。
标签: session ssh version sftp jsch