Java 正在尝试连接到具有本地代理类型的SSH服务器?

Java 正在尝试连接到具有本地代理类型的SSH服务器?,java,networking,groovy,proxy,jsch,Java,Networking,Groovy,Proxy,Jsch,我有一个新项目,在这个项目中,我应该连接到一个SSH服务器,并使用一个代理(这是本地的)。 问题是,如果我不使用代理,我会得到一个错误,说“UnknownHost”。 但当我使用代理时,它会说“JSchException ProxySOCKS5:com.jcraft.jsch.JSchException:fail in SOCKS5 proxy”。 我对套接字、代理和所有这些类型的东西都很陌生,所以非常感谢您的建议 JSch jsch = new JSch(); jsch.setKnownHos

我有一个新项目,在这个项目中,我应该连接到一个SSH服务器,并使用一个代理(这是本地的)。 问题是,如果我不使用代理,我会得到一个错误,说“UnknownHost”。 但当我使用代理时,它会说“JSchException ProxySOCKS5:com.jcraft.jsch.JSchException:fail in SOCKS5 proxy”。 我对套接字、代理和所有这些类型的东西都很陌生,所以非常感谢您的建议

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-JSch=new-JSch();
jsch.setKnownHosts(“已知主机”);
com.jcraft.jsch.Session Session=null;
com.jcraft.jsch.ProxySOCKS5 proxy=新的ProxySOCKS5(“localhost”,20004);
setUserPasswd(用户名、密码);
URL=新URL(“http”,“”,22,filePath,null);
session=jsch.getSession(用户名、主机名、22);
session.setPassword(密码);
session.setProxy(proxy);
会话连接(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);
SocketAddress addr=new-InetSocketAddress(“localhost”,20004);
代理代理=新代理(Proxy.Type.SOCKS,addr);
final String encodedSubaccount=新字符串(Base64.encodeBase64(subaccount.getBytes());
final String encodedLocationId=新字符串(Base64.encodeBase64(locationId.getBytes());
char[]pwdHelp=[];
setDefault(新验证器(){
@凌驾
受保护的java.net.PasswordAuthentication getPasswordAuthentication(){
返回新的java.net.PasswordAuthentication(“1.”+encodedSubaccount+“”+encodedLocationId,pwdHelp);
}
});
URL=新URL(“http”,“”,22,filePath,null);
HttpURLConnection connection=(HttpURLConnection)url.openConnection(proxy);
使用这种方法不会出现错误,但当我尝试获取responseMessage()或代码时,它只返回-1或null

有人能帮我吗?
提前感谢

我不是java开发人员,因此我只能帮助您解决问题的基础架构部分

未知主机:无法直接连接,因此必须使用代理。UnknownHost意味着java/您的计算机无法将DNS名称解析为IP地址,可能该DNS名称是内部/私有名称

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

确切的任务是什么

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

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

在2。案例:您可以使用ssh命令和web浏览器测试连接:

  • SSH到本地:
    SSH-D 1080本地\u远程\u主机\u或\u IP
  • 在webbrowser中设置socksproxy:Socks代理ip:127.0.0.1,端口:1080
  • 在web浏览器中,尝试连接到内部web服务器

  • 我会试试你的建议谢谢你的回答(+1)回答你的问题:我得到了一个没有任何http://的url,它只是一个“hostname:22”,但是url url=newURL不允许我在没有使用http://的情况下键入,你说我应该使用“ssh://”或类似的东西?(我还不太了解这些网络方面的事情)。如果我想总结一下我的目标:有一个本地服务器(stfp),有人在那里安装了一个连接器,该连接器的任务是它接受请求,然后你可以调用服务器(通过连接器).正如我所说,我不是java开发人员,但我认为web/url库无法处理SSH连接,因此您必须找到SSH库。您是否获得了关于如何连接到内部部署服务器和位于内部的服务器之后的任何信息/说明/文档?有不同类型的代理。您是否收到有关如何连接到此代理或如何通过代理ssh的说明?你能把你的问题包括在说明中吗?