1 / 5

File transfer over ssh via scp and sftp

File transfer over ssh via scp and sftp. A two second dirty example. Jsch. Limited documentation, but seems pretty good Get jar file from http://www.jcraft.com/jsch/ Examples: http://www.jcraft.com/jsch/examples/

niabi
Télécharger la présentation

File transfer over ssh via scp and sftp

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. File transfer over ssh via scp and sftp A two second dirty example

  2. Jsch • Limited documentation, but seems pretty good • Get jar file from http://www.jcraft.com/jsch/ • Examples: http://www.jcraft.com/jsch/examples/ • Documentionhttp://show.docjava.com/book/cgij/jdoc/net/ssh/jsch/JSch.html (or search for jsch doc) • To use, add the jar file to the set of external libraries in eclipse • Jsch requires a couple of classes to be implemented • UserInfo

  3. UserInfo • UserInfo • User info contains user names and passwords • The online examples show how to make a dialog box appear to get the user name and password. However, these examples don’t work on android. • By hardcoding, we can skip using UserInfo

  4. HostKeyRepository • Ssh stores the keys of machines it has previously communicated with. This avoids man-in-the-middle attacks • Jsch uses the class HostKeyRepository to decide how to store and retrieve keys • A hardcoded example is as follows • Add • MyHostKeyRepositorymyHostKeyRepository = new MyHostKeyRepository(); • class MyHostKeyRepository implements HostKeyRepository{}; • Let eclipse make required functions • Go to getHostKeyand add • byte[] key = new byte[16]; • String[] keyStr = {"ae","71","c6","56","fa","38","76","65","3c","ad","e8","8d","a1","71","00","23"}; • for(inti=0; i<keyStr.length; i++) • key[i] = Byte.parseByte(keyStr[i], 16); • HostKey[] hk = new HostKey[1]; • try { • hk[0] = new HostKey("128.4.35.59",key); • } catch (JSchException e) { • e.printStackTrace(); • } • return hk; • However, you must set the keyStr to be the key of the machine you will communicate with. • Sometimes this key is given in various config information. • You can get the key by running the program with the above, incorrect key. • The android log will show you an error and show the correct key. • Get that key string and put it into the code above

  5. File transfer with sftp • class MyRunnable implements Runnable { • int _arg; // this can be some argument, but we skip using arguments in this simple exmaple • MyRunnable(intarg) { • _arg = arg; • } • @Override • public void run() { • moveFile(arg); • } • } • public void moveFile() { // since the file transfer will take some time, we must put the file transfer in a separate thread. • MyRunnablemyrunnable = new MyRunnable(0); • new Thread(myrunnable).start(); • } • public void moveFileWithSFTP { • String user = “user"; // user name • String host = "128.4.1.45"; // machine name could be a string that is resolved with dns • String sfile= “filename.txt"; // file to move • String dfile = “filename.txt”; // name of destination file • JSchjsch=new JSch(); • jsch.setHostKeyRepository(myHostKeyRepository); • Session session; • session = jsch.getSession(user, host, 22); • session.setPassword(“password"); // hard coded password.. Use UserInfo to improve • session.connect(); • if(!session.isConnected()) { • Log.e("sch",“connect failed"); • session.disconnect(); • return; • } • Log.e("sch","connected"); • channel=session.openChannel("sftp"); • channel.connect(); • ChannelSftp c=(ChannelSftp)channel; • c.put(sfile,dfile,ChannelSftp.OVERWRITE); • if (((SftpATTRS)c.stat("LocationTracker.txt")).getSize()==(new File(lfile)).length()) { • Log.e("sfpt","success"); • } else { • Log.e("sfpt","file transfer faield"); • } • Log.e("sftp","done"); // this line is run only after the transfer finishes • channel.disconnect(); • session.disconnect(); • }

More Related