Это должно быть возможно с большинством 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
.....
Вы пытались сделать свой_имя_имя_сервера2.фул.qualified.domain.name с сервера1? Если вы просто выполняете ssh server2 с сервера 1, у вас может не быть доступа/привилегий ... – StackFlowed
Вы, скорее всего, можете настроить server1 как прокси-сервер и использовать переадресацию портов. Это относительно легко сделать. В вашем файле .ssh/config вы в основном настраиваете псевдоним для server2 и говорите ssh, чтобы использовать server1 в качестве прокси для подключения. Проверьте: [эта ссылка] (https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding). – PapaBuduiit
Почему вы хотите сделать программу? Вы могли бы просто использовать ProxyCommand, который подключается к Server1 и запускает netcat, чтобы сделать Server2 доступным – Joni