подключиться к SFTP с помощью Java - PullRequest
1 голос
/ 09 июня 2011

Мне нужна помощь с подключением к SFTP-серверу?У кого-нибудь есть рабочий код?

Я нашел что-то вроде этого

package test.JSch;

import com.jcraft.jsch.*;

public class TestJSch {
public static void main(String args[]) {
    JSch jsch = new JSch();
    Session session = null;
    try {
        session = jsch.getSession("USSERNAME", "HOST", 22);
        //session.setConfig("StrictHostKeyChecking", "no");
        session.setPassword("PASSWORD");
        System.out.println("1");
        session.connect();
        System.out.println("2");

        Channel channel = session.openChannel("sftp");
        System.out.println("3");
        channel.connect();
        System.out.println("4");
        ChannelSftp sftpChannel = (ChannelSftp) channel;
        sftpChannel.get("remotefile.txt", "localfile.txt");
        sftpChannel.exit();
        session.disconnect();
    } catch (JSchException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } catch (SftpException e) {
        e.printStackTrace();
    }
    }
}

, но это был вывод

com.jcraft.jsch.JSchException: java.net.ConnectException: Connection timed out: connect
    at com.jcraft.jsch.Util.createSocket(Util.java:258)
    at com.jcraft.jsch.Session.connect(Session.java:186)
    at com.jcraft.jsch.Session.connect(Session.java:145)
    at test.JSch.TestJSch.main(TestJSch.java:17)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at com.jcraft.jsch.Util.createSocket(Util.java:252)
    ... 3 more

что не так с этим кодом?

Ответы [ 6 ]

2 голосов
/ 16 декабря 2013

Вы можете попробовать увеличить время ожидания в Jsch Framework.

session.connect(int Timeout)

session.connect(30000);

Подробнее о Jcsh Javadoc

1 голос
/ 09 июня 2011

Вот более ранний вопрос о Stackoverflow, для которого принятый ответ предлагает использовать библиотеку JSch .

Как получить файл с сервера через SFTP?

Я вижу, что вы пытались подключиться через JSch и получили ошибку.

Я хотел бы предложить, прежде всего, проверить, можете ли вы подключиться к машине sftp с клиента (то же самое)компьютер, на котором вы тестируете свою программу), используя стандартный клиент sftp, такой как Filezilla в Windows ИЛИ просто команду sftp на терминале в * nix системах.

0 голосов
/ 13 июня 2018

У меня была такая же проблема с подключением оболочки. Решение было увеличить тайм-аут, в моем случае 5000 мсек было достаточно

JSch jsch = new JSch();
Session session = jsch.getSession(USERNAME, HOSTNAME, SSH_PORT);
session.setPassword(PASSWORD);
Hashtable<String,String> config = new Hashtable<String,String>();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(5000);
0 голосов
/ 29 июня 2016

JSch API: session.connect (); снова запросить имя пользователя и пароль для подключения к серверу, даже если они передаются в качестве параметра.

как создать код, чтобы избежать повторного запроса имени пользователя и пароля.

0 голосов
/ 09 июня 2011

Вы можете использовать Apache Commons VFS

FileSystemManager fsManager = VFS.getManager();
FileObject remoteFile = fsManager.resolveFile("sftp://myusername:mypassword@somehost/pub/downloads/somefile.tgz" );
InputStream in = remoteFile.getContent().getInputStream();
0 голосов
/ 09 июня 2011

Я успешно использовал библиотеку JSch .У него, как известно, плохая документация, но, по слухам, он очень строго и эффективно реализует свои функции SSH.

...