我为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
异常。
为什么?
谢谢大家!
答案 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()
来连接没有通道的会话。这解决了我的问题。