我有两台服务器(Server1和Server2), 在我的网络上,我只能用ssh连接到Server1,我的网络无法看到Server2 ......
我想创建一个在Server1中连接的程序,并再次使用ssh启动与Server2的新连接。
我已经使用java中的SSH库连接到Server1,但我不知道如何使用我的实际ssh会话启动新连接。
在终端中执行ssh Server2@10.1.10.10
我该怎么做?
答案 0 :(得分: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
.....