Jsch将文件从一台远程服务器传输到另一台远程服务器

时间:2019-08-09 14:52:34

标签: java spring-boot jsch

我正在尝试使用Jsch将文件从远程服务器移动到另一台远程服务器。

我目前拥有连接到源远程服务器并创建到目标远程服务器的SSH隧道的代码。下面的代码

        // First level target
        String host = "sourceHost"
        String user = "sourceUser"
        String password = "sourcePassword"

        // The host of the second target
        String tunnelRemoteHost = "destinationHost"
        String secondPassword = "sourcePassword"
        int port=22;


        JSch jsch=new JSch();
        Session session=jsch.getSession(user, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");

        // create port from 2233 on local system to port 22 on tunnelRemoteHost
        session.setPortForwardingL(2233, tunnelRemoteHost, 22);
        session.connect();
        session.openChannel("direct-tcpip");

        // create a session connected to port 2233 on the local host.
        Session secondSession = jsch.getSession(user, "localhost", 2233);
        secondSession.setPassword(secondPassword);
        secondSession.setConfig("StrictHostKeyChecking", "no");

        secondSession.connect(); // now we're connected to the secondary system
        Channel channel=secondSession.openChannel("exec");
        ((ChannelExec)channel).setCommand("hostname");

        channel.setInputStream(null);
        try {

            InputStream stdout = channel.getInputStream();

            channel.connect();

            while (true) {
                byte[] tmpArray = new byte[1024];
                while (stdout.available() > 0) {
                    int i = stdout.read(tmpArray, 0, 1024);
                    if (i < 0) break;
                    outputBuffer.append(new String(tmpArray, 0, i));
                }
                if (channel.isClosed()) {
                    System.out.println("exit-status: " + channel.getExitStatus());
                    break;
                }
            }
            stdout.close();

我具有源服务器的文件路径和文件名,因此可以将文件传输到目标服务器。我应该只连接到源服务器并在第二台服务器上运行sftp命令,而不是隧道吗?还是我可以利用这个开放的隧道来传输文件?

0 个答案:

没有答案