Java从已经存在的新的ssh连接打开

时间:2015-07-30 14:15:26

标签: java ssh connection sftp jsch

我是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);}
}

它工作正常。但是当我尝试使用相同的代码连接到第二个时,这不起作用,因为应用程序尝试创建一个全新的连接而不使用已经创建的连接。

有人知道如何使用已经创建的连接错误的应用程序?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以在第一个Nothing中使用端口转发,然后创建另一个连接到转发的本地端口中的主机的session。示例JumpHosts.java就是这样做的。对于公钥身份验证,请参阅UserAuthPubKey.java

这是对基于这些示例的代码的修改:

session