我是JAVA的新手。 我尝试编写下一个应用程序 - 打开与UNIX服务器的ssh连接,并使用私钥从此服务器连接到另一个服务器。
要连接到第一台服务器,我使用的程序如下:
public static void main(String args[])
{
String user = "john";
String password = "mypassword";
String host = "192.168.100.23";
int port=22;
try
{
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
System.out.println("Connection established.");
System.out.println("Crating SFTP Channel.");
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
System.out.println("SFTP Channel created.");
InputStream out= null;
out= sftpChannel.get(remoteFile);
BufferedReader br = new BufferedReader(new InputStreamReader(out));
String line;
while ((line = br.readLine()) != null)
System.out.println(line);
br.close();
}
catch(Exception e){System.err.print(e);}
}
它工作正常。但是当我尝试使用相同的代码连接到第二个时,这不起作用,因为应用程序尝试创建一个全新的连接而不使用已经创建的连接。
有人知道如何使用已经创建的连接错误的应用程序?
感谢。
答案 0 :(得分:2)
您可以在第一个Nothing
中使用端口转发,然后创建另一个连接到转发的本地端口中的主机的session
。示例JumpHosts.java就是这样做的。对于公钥身份验证,请参阅UserAuthPubKey.java
这是对基于这些示例的代码的修改:
session