JSch session.connect()与Core FTP挂起

时间:2011-06-29 08:12:22

标签: sftp jsch hung

我为localhost和下一个代码配置了CoreFTP:

JSch.setLogger(new MyJschLogger()); //class for console output

Session session = jsch.getSession("user", "localhost", 21);

Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);

session.setPassword("password");
session.connect();

当程序达到connect()时,控制台输出会显示两条消息:

INFO: Connecting to localhost port 21
INFO: Connection established

......没有更多的事情发生。几分钟后,会出现connection is closed by foreign host异常。

为什么?

谢谢大家!

2 个答案:

答案 0 :(得分:3)

端口21是FTP的正常端口。 JSch只是SSH客户端,在SFTP类中支持ChannelSFTP。 JSch对FTP一无所知(而且SFTP与FTP无关,除了名称和它允许类似的东西)。

您需要将服务器设置为使用SSH协议(通常在端口22上,但您可以使用任何端口,只要您在客户端上使用相同的端口)。请参阅the documentation - 我认为您必须检查SSH复选框。

此外,如果您的代码只是您发布的内容,那么只需连接即可。要传输文件,您需要打开ChannelSFTP并发出正确的命令(例如,调用一个或多个put / get方法)。

答案 1 :(得分:0)

我也面临类似的问题:

"ERROR 2016-04-27 15:05:16,489 [CollectionThreadPool-0] com.dell.supportassist.collector.cli.executor.SSHExecutor: com.jcraft.jsch.JSchException: connection is closed by foreign host"

就我而言,频道随机关闭。当我们尝试重新连接频道时,它没有重新连接和失败。

这是由于连接时循环逻辑而发生的,所以我尝试通过调用方法connectWithoutOpenChannel而不是connectinternal()来连接没有通道的会话。这解决了我的问题。