【问题标题】:Trying to connect to an SSH server with on-premise proxy type?尝试使用本地代理类型连接到 SSH 服务器?
【发布时间】:2023-03-03 02:53:01
【问题描述】:

我有一个新项目,我应该使用代理(本地)连接到 SSH 服务器。 问题是,如果我不使用代理,我会收到一条错误消息“UnknownHost”。 但是当我使用代理时,它会显示“JSchException ProxySOCKS5:com.jcraft.jsch.JSchException:在 SOCKS5 代理中失败”。 我对套接字、代理和所有这些东西都很陌生,所以每一个建议都值得赞赏。

JSch jsch = new JSch();
jsch.setKnownHosts("known_hosts");
com.jcraft.jsch.Session session = null;
com.jcraft.jsch.ProxySOCKS5 proxy = new ProxySOCKS5("localhost", 20004);
proxy.setUserPasswd(userName, password);

URL url = new URL("http", "<remoteUrl>", 22, filePath, null);

session = jsch.getSession(userName, hostName, 22);
session.setPassword(password);

session.setProxy(proxy );
session.connect(10000);

我确实尝试了不同的方向,我不使用 jsch,只使用 java.net。该代码:

SocketAddress addr = new InetSocketAddress("localhost", 20004);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr);

final String encodedSubaccount = new String(Base64.encodeBase64(subaccount.getBytes()));
final String encodedLocationId = new String(Base64.encodeBase64(locationId.getBytes()));

char[] pwdHelp = [];

Authenticator.setDefault(new Authenticator() {
      @Override
        protected java.net.PasswordAuthentication getPasswordAuthentication() {
           return new java.net.PasswordAuthentication("1." + encodedSubaccount + "." + encodedLocationId , pwdHelp);
                }
            });

URL url = new URL("http", "<remoteUrl>", 22, filePath, null);

HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);

使用这种方法,没有错误,但是当我尝试 getResponseMessage() 或代码时,它只返回 -1 或 null。

有人可以帮帮我吗? 提前致谢

【问题讨论】:

  • 有不同种类的代理。您是否收到有关如何连接到此代理或如何通过代理进行 ssh 的说明?你能edit你的问题包括说明吗?

标签: java networking groovy proxy jsch


【解决方案1】:

我不是 Java 开发人员,所以我只能帮助您解决问题的基础架构部分。

UnknownHost:您无法直接连接,这就是您必须使用代理的原因。 UnknownHost 表示 java/您的机器无法将 DNS 名称解析为 IP 地址,可能该 DNS 名称是内部/私有名称。

正如我在您的 java 代码中看到的,您尝试连接 HTTP 协议而不是 SSH 协议。

具体的任务是什么?

有人为您提供了本地 SocksProxy IP 和端口,您必须通过内部 SSH 服务器连接?

您必须使用 SSH 协议连接到本地服务器以创建本地 SocksProxy,并且您必须通过本地 SocksProxy 连接到内部服务器?

在 2. 的情况下,您可以使用 ssh 命令和网络浏览器测试连接:

  1. SSH 到本地:ssh -D 1080 on-premise_remote_hosntame_or_IP
  2. 在网络浏览器中设置 socksproxy:Socks 代理 ip:127.0.0.1,端口:1080
  3. 在网络浏览器中尝试连接到内部网络服务器

【讨论】:

  • 我会尝试您的建议 感谢您的回答 (+1) 回答您的问题:我得到一个没有任何 http:// 的 url,它只是一个“主机名:22”,但 URL url = new URL 不允许我在不使用 http:// 的情况下输入,你说我应该使用“ssh://”或类似的东西? (我还不太了解这些网络的东西)。如果我想总结一下我的目标:有一个本地服务器(stfp),有人在那里安装了一个连接器,那个连接器的任务是它接受请求,然后你可以调用服务器(通过连接器)。跨度>
  • 正如我所说,我不是 Java 开发人员,但我认为 web/url 库不能处理 SSH 连接,因此您必须找到 SSH 库。您是否获得任何信息/描述/文档如何连接到本地服务器以及位于内部的服务器之后?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2012-01-09
  • 1970-01-01
  • 2020-04-07
  • 2018-09-22
  • 2016-08-23
相关资源
最近更新 更多