安卓 ssh 和 rsync 同步客户端的实现
文章目录
1. 介绍
基于安卓的 ssh 和 rsync 客户端,可用于对服务器指定的目录进行同步到手机。 在这里我们使用 Dropbear 的 dbclient 作为 ssh 的客户端。
Dropbear是一个相对较小的SSH服务器和客户端。 它运行在一个基于POSIX的各种平台。 Dropbear是开源软件,在麻省理工学院式的许可证。 Dropbear是特别有用的“嵌入”式的Linux(或其他Unix)系统,如无线路由器。
2. 准备工作
在使用之前,需要先编译 dropbear 的可执行文件,详细的编译步骤见: BuildingDropbear
或者直接下载已经帮我们编译好的文件: dropbearmulti
rsync 可以到网站上找到相应的文件: Rsync
或者直接下载已经编译好的文件: rsync
3. 如何使用
关键代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
ArrayList<String> list = new ArrayList<String>(); list.add(binDir + "/rsync"); // rsync 的 bin 目录 list.add("-avzO"); // 同步参数 list.add("--progress"); // 显示进度 list.add("-e"); // 用于指定端口,或者 key list.add(binDir + "/ssh -y -i " + homeDir + "/id_rsa"); // id_rsa 的存放目录 list.add(Config.SERVER); // 同步服务器地址目录,如 admin@wenzhixin.net.cn:~/ list.add(Config.ROOT); // 需要同步到的目录 try { ProcessBuilder pb = new ProcessBuilder(list.toArray(new String[] {})); pb.directory(binDir); Map<String, String> env = pb.environment(); env.clear(); env.putAll(System.getenv()); pb.redirectErrorStream(true); Process p = pb.start(); BufferedReader bis = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = bis.readLine()) != null) { log(line); // 显示日志 } bis.close(); p.waitFor(); p.destroy(); } catch (Exception e) { log(e.getMessage()); } |
4. 需要注意的问题
1) 如何生成 id_rsa 和 authorized_keys,从而跳过密码的验证
生成 id_rsa,拷贝到手机客户端下:
1
|
dropbearkey -t rsa -f ~/.ssh/id_rsa |
生成 authorized_keys,并拷贝到服务器 ~/.ssh/ 下:
1
|
dropbearkey -y -f ~/.ssh/id_rsa | grep “^ssh-rsa ” >> authorized_keys |
2) 跳过 known_hosts 提示和密码验证
1
|
ssh -y -i id_rsa |
- -y 表示跳过 known_hosts
- -i 指定 id_rsa 进行认证
文章作者 wenzhixin
上次更新 2013-10-18