Пытаетесь подключиться к серверу S SH с локальным типом прокси? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть новый проект, где я должен подключиться к серверу S SH с прокси-сервером (который находится в помещении). Проблема в том, что если я не использую прокси, я получаю сообщение об ошибке «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 или ноль.

Может кто-нибудь помочь меня нет? Заранее спасибо

1 Ответ

1 голос
/ 22 апреля 2020

Я не java разработчик, поэтому я могу помочь вам только в части инфраструктуры.

UnknownHost : вы не можете подключиться напрямую, поэтому вы должны использовать прокси , UnknownHost означает, что java / ваша машина не может преобразовать DNS-имя в IP-адрес, может быть, это DNS-имя является внутренним / частным.

Как я вижу В вашем java коде Вы пытаетесь подключить протокол HTTP вместо S * Протокол 1037 *.

Какова точная задача?

Кто-то предоставил вам локальный IP-адрес SocksProxy и порт, и вы должны подключиться через внутренний S SH сервер?

ИЛИ

Необходимо подключиться с помощью протокола S SH к локальному серверу, чтобы создать локальный SocksProxy, и вам нужно подключиться к внутреннему серверу через локальный SocksProxy?

. В 2. случае вы можете проверить соединение с помощью команды s sh и веб-браузера:

  1. S SH до помещения: ssh -D 1080 on-premise_remote_hosntame_or_IP
  2. Настройка socksproxy в веб-браузере: IP-адрес прокси Socks: 127.0.0.1, порт: 1080
  3. In веб-браузер попробуйте подключиться к внутреннему веб-серверу
...