我有一个新的项目,在那里我应该连接到一个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,只使用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()或code时 它只返回-1或null.
谁能帮帮我吗?
我不是java开发人员,所以我只能帮助你解决基础架构部分的问题。
UnknownHost未知主机(UnknownHost):你不能直接连接,所以要用代理。UnknownHost 意味着javayour机器无法将DNS名解析为IP地址,也许这个DNS名是一个内部私有的。
在你的java代码中,你试图连接HTTP协议而不是SSH协议。
具体任务是什么?
有人给你提供了一个内部的SocksProxy的IP和端口,而你必须通过内部的SSH服务器来连接?
或者
1.你要用SSH协议连接到内部服务器,创建一个本地SocksProxy,你要通过本地SocksProxy连接到内部服务器?
在2.的情况下,你可以用ssh命令和网页浏览器测试连接。
ssh -D 1080 on-premise_remote_hosntame_or_IP