2010-02-12 9 views

Odpowiedz

5

Używam andFTP dla transferów sftp, ale to nie jest open source.

Możesz sprawdzić connectBot. Wystąpił problem dotyczący sftp transfers.

+0

Hi Macarse thnk Ci odpowiedź. Przeszedłem przez klienta openbolowego SSH connectbolt na Androidzie. Teraz chcę zapytać, czy mogę zintegrować FTP i połączyć SSH, aby utworzyć mój SFTP ?? O ile to możliwe, biorąc pod uwagę, że nie znam zbyt wielu wewnętrznych elementów SSH. Z góry dzięki. –

+0

Myślę, że dodadzą go, ale jeszcze go nie ma. Opublikuj komentarz na temat problemu i poproś go o pomoc. – Macarse

4

Tak, edtFTPj/PRO to komercyjna biblioteka Java, która działa na systemie Android i obsługuje SFTP (a także FTP i FTPS).

0

Można użyć jsch.

Gradle:

compile group: 'com.jcraft', name: 'jsch', version: '0.1.54' 

Proguard (ja trzymam go ignorować ostrzeżeń publicznych i proste rozwiązanie, przesadą wybiorę nie zadzierać z nim tutaj..). Jeśli znasz poprawne rozwiązanie - daj mi znać. Kod

-keep class com.jcraft.jsch.jce.* 
-keep class * extends com.jcraft.jsch.KeyExchange 
-keep class com.jcraft.jsch.** 
-keep class com.jcraft.jzlib.** 
-keep class com.jcraft.jsch.jce.* 
-keep class com.jcraft.jzlib.ZStream 
-keep class com.jcraft.jsch.Compression 
-keep class org.ietf.jgss.* 
-dontwarn org.ietf.jgss.** 
-dontwarn com.jcraft.jsch.** 

:

// add correct exception-handling; remember to close connection in all cases 
public void doUpload(String host, String user, String password, String folder, int port, File file){ 
    JSch jsch = new JSch(); 

    Session session = jsch.getSession(user, host, port); 
    session.setPassword(password); 

    java.util.Properties config = new java.util.Properties(); 
    //Don't do it on Production -- makes it MITM-vulnerable 
    config.put("StrictHostKeyChecking", "no"); 
    session.setConfig(config); 
    session.setTimeout(5000); 
    session.setConfig("PreferredAuthentications", "password"); 
    session.connect(); 

    Channel channel = session.openChannel("sftp"); 
    channel.connect(); 
    ChannelSftp channelSftp = (ChannelSftp) channel; 

    String home = channelSftp.getHome(); 
    if (folder == null || folder.length() == 0 || "/".equals(folder)) { 
     folder = home; 
    } else { 
     File file = new File(new File(home), folder); 
     folder = file.getPath(); 
    } 
    channelSftp.cd(folder); 

    try (BufferedInputStream buffIn = new BufferedInputStream(new FileInputStream(file.getPath()))) { 
     ProgressInputStream progressInput = new ProgressInputStream(buffIn, progressListener, file.length()); 
     channelSftp.put(progressInput, file.getName()); 
    } 

    channelSftp.disconnect(); 
    session.disconnect(); 
}