2016-02-17 18 views
0

我有兩臺服務器(Server1和Server2), 我的網絡上,我只能用SSH到Server1連接,我的網絡不能看到Server2上...可以通過Java中的其他SSH連接使用SSH連接服務器嗎?

我想要在Server1的連接程序,並再次使用ssh啓動到Server2的新連接。

我已經在java中使用SSH libs連接到Server1,但我不知道如何使用我的實際ssh會話啓動新連接。

這就像在終端做ssh [email protected]

我怎麼能這樣做呢?

+0

您是否嘗試過從server1執行[email protected]?如果您只是從server1執行ssh server2,您可能沒有訪問權限/特權... – 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,作爲其簡單地連接到所述第一和然後連接一個隧道的輸入/輸出到一個新的客戶端實例後向前執行端口到所述第二主機的情況。

但是,使用J2SSH Maverick開放源代碼API,我們可以很容易地爲您做轉發設置。

下面的代碼演示瞭如何執行此操作,首先打開與第一臺服務器的連接。然後一旦連接調用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 
.....