2016-02-17 12 views
0

У меня есть два сервера (server1 и SERVER2), в моей сети, я могу только соединиться с SSH к Server1, моя сеть не может видеть Server2 ...Возможно ли подключение на сервере с использованием SSH через другое соединение SSH в Java?

Я хочу сделать программу, которая соединяет в Server1 , и снова запускает новое подключение к Server2 с помощью ssh.

Я уже подключился к Server1 с использованием SSH-библиотек в java, но я не знаю, как запустить новое соединение, используя мою фактическую сессию ssh.

Это как в терминале сделать ssh [email protected]

Как я могу это сделать?

+0

Вы пытались сделать свой_имя_имя_сервера2.фул.qualified.domain.name с сервера1? Если вы просто выполняете ssh server2 с сервера 1, у вас может не быть доступа/привилегий ... – StackFlowed

+0

Вы, скорее всего, можете настроить server1 как прокси-сервер и использовать переадресацию портов. Это относительно легко сделать. В вашем файле .ssh/config вы в основном настраиваете псевдоним для server2 и говорите ssh, чтобы использовать server1 в качестве прокси для подключения. Проверьте: [эта ссылка] (https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding). – PapaBuduiit

+0

Почему вы хотите сделать программу? Вы могли бы просто использовать ProxyCommand, который подключается к Server1 и запускает netcat, чтобы сделать Server2 доступным – Joni

ответ

0

Это должно быть возможно с большинством Java SSH API, поскольку это просто случай выполнения перенаправления порта ко второму хосту после подключения к первому, а затем подключения ввода/вывода туннеля в новый экземпляр клиента.

Однако с помощью API с открытым исходным кодом J2SSH Maverick мы делаем это довольно просто и выполняем настройку пересылки для вас.

Код ниже показывает, как вы это делаете, сначала откройте подключение к первому серверу. Затем один раз подключился вызов openRemoteClient, и он вернет объект SshClient для второго. В фоновом режиме используется переадресация портов для подключения второго клиента.

В этом примере используется аутентификация по паролю, но вы можете, конечно, использовать любой тип аутентификации.

// Create initial connection 
SshConnector con = SshConnector.createInstance(); 
SshClient ssh = con.connect(new SocketTransport("host.external", 22), "ubuntu"); 

// Authenticate 
PasswordAuthentication pwd = new PasswordAuthentication(); 
pwd.setPassword("xxxxxxx"); 

ssh.authenticate(pwd); 

// Created forwarded connection 
SshClient remoteClient = ssh.openRemoteClient("host.internal", 22, "ubuntu"); 

// Now you have to authenticate the second client 
..... 
Смежные вопросы