问题:使用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)
答案 0 :(得分:0)
错误输出是非信息性的(以及关于图书馆的稀缺文档)。原因是在连接上管理服务器rsa-keys。我想要没有ui对话框和完全自动化(禁用UserInfo)。
同样 StrickedHostKeyChecking应该不是,尽管它不安全。将其设置为“no”允许将rsa-keys自动添加到本地密钥存储库(例如〜/ .ssh / known_hosts )。
最后得到了一个代码:
ql.Owner = mainWindow;
这些文章帮助:
答案 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");