JSCH频道未打开(新)

时间:2016-09-22 16:04:39

标签: jsch channel

问题:使用JSCH库通过SFTP连接远程站点导致“频道未打开”。代码在一个互联网连接上工作正常,但从另一个连接失败。另一个是通过代理完成的。不过,我可以使用FileZilla客户端通过SFTP从另一个连接。

研究:尝试增加连接时间并从类似问题设置 useDNS:false 。我有会话和频道从它开始。仍然,在结束后,频道连接失败。

问题:如何获得连接。

下面是代码和错误堆栈跟踪提取:

  JSch jsch = new JSch();
  UserInfo userInfo ;

  jsch.setKnownHosts(KNOWN_HOSTS);

  session = jsch.getSession(
    Menue.SITE_LOGIN,
    Menue.SITE_HOST,
    Menue.SITE_PORT);

  session.setPassword(
    Menue.SITE_PASSWORD);

  if (Menue.USE_PROXY) {
    session.setProxy(
      new ProxyHTTP(
        Menue.PROXY_HOST,
        Menue.PROXY_PORT));
  }

  session.setConfig(
    "StrictHostKeyChecking",
    "yes");

  session.connect();
  channel = session.openChannel("sftp");
  channel.setInputStream(System.in);
  channel.setOutputStream(System.out);
  channel.connect(60 * 1000); // Error: channel is not opened.

堆栈跟踪:

  

com.jcraft.jsch.JSchException:未打开频道。在   com.jcraft.jsch.Channel.sendChannelOpen(Channel.java:765)at at   com.jcraft.jsch.Channel.connect(Channel.java:151)

2 个答案:

答案 0 :(得分:0)

错误输出是非信息性的(以及关于图书馆的稀缺文档)。原因是在连接上管理服务器rsa-keys。我想要没有ui对话框和完全自动化(禁用UserInfo)。

同样 StrickedHostKeyChecking应该不是,尽管它不安全。将其设置为“no”允许将rsa-keys自动添加到本地密钥存储库(例如〜/ .ssh / known_hosts )。

最后得到了一个代码:

ql.Owner = mainWindow;

这些文章帮助:

Original example on KnownHosts

Adding rsa to known_hosts

Unknown hostkey management

答案 1 :(得分:0)

在 Windows 上,我在以下位置找到了已知主机的目录:

C:\users\myusername.ssh\

但是没有通过登录我尝试通过 putty 连接的服务器并使用以下命令构建我自己的 known_hosts 文件:

ssh-keyscan -t rsa localhost

然后取回:localhost ssh-rsa REALLYLONGSTRINGHERE 右键单击 putty 的顶部工具栏,然后选择全部复制。然后将其粘贴到文本编辑器中并进行编辑,使其看起来像这样:

serverip ssh-rsa REALLYLONGSTRINGHERE

另存为 C:\users\myusername.ssh\known_hosts

然后在你的java代码中添加这一行:

jsch.setKnownHosts("C:/users/myusername/.ssh/known_hosts");