2011-09-17 31 views
5

最後,我可以在android程序中運行超級用戶命令。現在我想從手機中將幾個文件同步到我的筆記本電腦,然後出現問題。 rsync需要密碼給予,我不知道如何給我的筆記本電腦密碼到這個android程序。有些方法可以使用私鑰/公鑰來完成rsync。但我想一般那是什麼怎麼做我喂輸入進行rsync或爲此事通過鍵盤的任何命令......我在這裏附上我的計劃......Android中的Rsync

package com.iiitb.nikhil.sindhu; 

import java.io.BufferedReader; 
import java.io.DataInput; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import java.util.*; 
import android.util.*; 


public class LinuxShellCommandAndroidProgramActivity extends Activity { 
    /** Called when the activity is first created. */ 

    TextView tv; 
    LinearLayout l; 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     try { 
      Process process = Runtime.getRuntime().exec("/system/bin/su"); 
      DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
      DataInputStream is=new DataInputStream(process.getInputStream()); 
      tv = new TextView(this); 
      os.writeBytes("/system/xbin/rsync /data/data/newfiles [email protected]:/home/sindhu/"); 
      String output=new String(); 
      String temp = new String(); 
      output=is.readLine(); 
      tv.setText(output); 
      os.flush(); 
    } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    }finally { 
     setContentView(tv); } 

    } 
} 

在上面我試圖做從我的手機的rsync我laptop..the上面的命令會要求輸入密碼,但我不理解如何給輸入將此Android程序

+1

工作rsync的例子只是可以肯定,'用戶名:密碼@主機:端口/ path'方法是行不通的,對嗎? – denolk

回答

3

可以從Java到 執行proccess寫(「模擬」鍵盤輸入)
Can Java Runtime.exec another java program that uses stdin?

這是當你執行android的殼rsync的不帶任何參數輸出

有一個-password-file =文件的國旗,但我沒有看到任何直接的方式來設置密碼

 

# rsync 
rsync version 3.0.6 protocol version 30 
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others. 
Web site: http://rsync.samba.org/ 
Capabilities: 
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints, 
    no socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, 
    append, no ACLs, xattrs, iconv, symtimes 

rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you 
are welcome to redistribute it under certain conditions. See the GNU 
General Public Licence for details. 

rsync is a file transfer program capable of efficient remote update 
via a fast differencing algorithm. 

Usage: rsync [OPTION]... SRC [SRC]... DEST 
    or rsync [OPTION]... SRC [SRC]... [[email protected]]HOST:DEST 
    or rsync [OPTION]... SRC [SRC]... [[email protected]]HOST::DEST 
    or rsync [OPTION]... SRC [SRC]... rsync://[[email protected]]HOST[:PORT]/DEST 
    or rsync [OPTION]... [[email protected]]HOST:SRC [DEST] 
    or rsync [OPTION]... [[email protected]]HOST::SRC [DEST] 
    or rsync [OPTION]... rsync://[[email protected]]HOST[:PORT]/SRC [DEST] 
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect 
to an rsync daemon, and require SRC or DEST to start with a module name. 

Options 
-v, --verbose    increase verbosity 
-q, --quiet     suppress non-error messages 
    --no-motd    suppress daemon-mode MOTD (see manpage caveat) 
-c, --checksum    skip based on checksum, not mod-time & size 
-a, --archive    archive mode; equals -rlptgoD (no -H,-A,-X) 
    --no-OPTION    turn off an implied OPTION (e.g. --no-D) 
-r, --recursive    recurse into directories 
-R, --relative    use relative path names 
    --no-implied-dirs  don't send implied dirs with --relative 
-b, --backup    make backups (see --suffix & --backup-dir) 
    --backup-dir=DIR  make backups into hierarchy based in DIR 
    --suffix=SUFFIX   set backup suffix (default ~ w/o --backup-dir) 
-u, --update    skip files that are newer on the receiver 
    --inplace    update destination files in-place (SEE MAN PAGE) 
    --append    append data onto shorter files 
    --append-verify   like --append, but with old data in file checksum 
-d, --dirs     transfer directories without recursing 
-l, --links     copy symlinks as symlinks 
-L, --copy-links   transform symlink into referent file/dir 
    --copy-unsafe-links  only "unsafe" symlinks are transformed 
    --safe-links   ignore symlinks that point outside the source tree 
-k, --copy-dirlinks   transform symlink to a dir into referent dir 
-K, --keep-dirlinks   treat symlinked dir on receiver as dir 
-H, --hard-links   preserve hard links 
-p, --perms     preserve permissions 
-E, --executability   preserve the file's executability 
    --chmod=CHMOD   affect file and/or directory permissions 
-X, --xattrs    preserve extended attributes 
-o, --owner     preserve owner (super-user only) 
-g, --group     preserve group 
    --devices    preserve device files (super-user only) 
    --specials    preserve special files 
-D       same as --devices --specials 
-t, --times     preserve modification times 
-O, --omit-dir-times  omit directories from --times 
    --super     receiver attempts super-user activities 
    --fake-super   store/recover privileged attrs using xattrs 
-S, --sparse    handle sparse files efficiently 
-n, --dry-run    perform a trial run with no changes made 
-W, --whole-file   copy files whole (without delta-xfer algorithm) 
-x, --one-file-system  don't cross filesystem boundaries 
-B, --block-size=SIZE  force a fixed checksum block-size 
-e, --rsh=COMMAND   specify the remote shell to use 
    --rsync-path=PROGRAM specify the rsync to run on the remote machine 
    --existing    skip creating new files on receiver 
    --ignore-existing  skip updating files that already exist on receiver 
    --remove-source-files sender removes synchronized files (non-dirs) 
    --del     an alias for --delete-during 
    --delete    delete extraneous files from destination dirs 
    --delete-before   receiver deletes before transfer, not during 
    --delete-during   receiver deletes during transfer (default) 
    --delete-delay   find deletions during, delete after 
    --delete-after   receiver deletes after transfer, not during 
    --delete-excluded  also delete excluded files from destination dirs 
    --ignore-errors   delete even if there are I/O errors 
    --force     force deletion of directories even if not empty 
    --max-delete=NUM  don't delete more than NUM files 
    --max-size=SIZE   don't transfer any file larger than SIZE 
    --min-size=SIZE   don't transfer any file smaller than SIZE 
    --partial    keep partially transferred files 
    --partial-dir=DIR  put a partially transferred file into DIR 
    --delay-updates   put all updated files into place at transfer's end 
-m, --prune-empty-dirs  prune empty directory chains from the file-list 
    --numeric-ids   don't map uid/gid values by user/group name 
    --timeout=SECONDS  set I/O timeout in seconds 
    --contimeout=SECONDS set daemon connection timeout in seconds 
-I, --ignore-times   don't skip files that match in size and mod-time 
    --size-only    skip files that match in size 
    --modify-window=NUM  compare mod-times with reduced accuracy 
-T, --temp-dir=DIR   create temporary files in directory DIR 
-y, --fuzzy     find similar file for basis if no dest file 
    --compare-dest=DIR  also compare destination files relative to DIR 
    --copy-dest=DIR   ... and include copies of unchanged files 
    --link-dest=DIR   hardlink to files in DIR when unchanged 
-z, --compress    compress file data during the transfer 
    --compress-level=NUM explicitly set compression level 
    --skip-compress=LIST skip compressing files with a suffix in LIST 
-C, --cvs-exclude   auto-ignore files the same way CVS does 
-f, --filter=RULE   add a file-filtering RULE 
-F       same as --filter='dir-merge /.rsync-filter' 
          repeated: --filter='- .rsync-filter' 
    --exclude=PATTERN  exclude files matching PATTERN 
    --exclude-from=FILE  read exclude patterns from FILE 
    --include=PATTERN  don't exclude files matching PATTERN 
    --include-from=FILE  read include patterns from FILE 
    --files-from=FILE  read list of source-file names from FILE 
-0, --from0     all *-from/filter files are delimited by 0s 
-s, --protect-args   no space-splitting; only wildcard special-chars 
    --address=ADDRESS  bind address for outgoing socket to daemon 
    --port=PORT    specify double-colon alternate port number 
    --sockopts=OPTIONS  specify custom TCP options 
    --blocking-io   use blocking I/O for the remote shell 
    --stats     give some file-transfer stats 
-8, --8-bit-output   leave high-bit chars unescaped in output 
-h, --human-readable  output numbers in a human-readable format 
    --progress    show progress during transfer 
-P       same as --partial --progress 
-i, --itemize-changes  output a change-summary for all updates 
    --out-format=FORMAT  output updates using the specified FORMAT 
    --log-file=FILE   log what we're doing to the specified FILE 
    --log-file-format=FMT log updates using the specified FMT 
    --password-file=FILE read daemon-access password from FILE 
    --list-only    list the files instead of copying them 
    --bwlimit=KBPS   limit I/O bandwidth; KBytes per second 
    --write-batch=FILE  write a batched update to FILE 
    --only-write-batch=FILE like --write-batch but w/o updating destination 
    --read-batch=FILE  read a batched update from FILE 
    --protocol=NUM   force an older protocol version to be used 
    --iconv=CONVERT_SPEC request charset conversion of filenames 
-4, --ipv4     prefer IPv4 
-6, --ipv6     prefer IPv6 
    --version    print version number 
(-h) --help     show this help (-h works with no other options) 

Use "rsync --daemon --help" to see the daemon-mode command-line options. 
Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation. 
See http://rsync.samba.org/ for updates, bug reports, and answers 
rsync error: syntax or usage error (code 1) at main.c(1407) [client=3.0.6] 
2

假設你有你的筆記本電腦的rsync進程,你可以使用RSYNC_PASSWORD環境變量或- 密碼文件選項。

從手冊頁:

您可以通過設置環境變量RSYNC_PASSWORD您要使用密碼或使用--password-file選項避免密碼提示。這在編寫rsync腳本時可能很有用。

...

--password文件 此選項允許您訪問遠程rsync進程提供的文件的密碼。請注意,當使用遠程shell作爲傳輸時,使用內置傳輸訪問rsync守護進程時,此選項僅適用於 ,而不是 。該文件不能是世界可讀的 。它應該只包含一個密碼 行。

2

至於你提到的,使用公鑰/私鑰是一種替代,但是這是最安全和最佳的選擇。即使在Android中也很容易設置:

通常您在用戶主頁中有一個.ssh文件夾,但在Android中您可能無法使用它(取決於運行腳本的用戶以及Android中的每個應用程序以另一個用戶名運行)

Rsync有它自己的服務,但它通常只用於SSH。您可以使用-e選項在Rsync中使用任何SSH參數。在你的特殊情況下,SSH有-i選項來指定一個私鑰來進行身份驗證,以防SSH工作(因此Rsync)不會要求輸入密碼。

你的情況,這應該是這樣的:

rsync -rltD --no-p -e "ssh -i /path_to_your_private_key" /path_to_local_files_on_android [email protected]:/path_on_remote_server

那麼您應該將公共密鑰附加到目標計算機的的〜/ .ssh/authorized_keys2中,在這個例子中的/ home /用戶1 /的.ssh/authorized_keys2中/ path_to_your_private_key」

另一個不安全的,不推薦選擇是使用sshpas直接輸入你的密碼:

rsync -rltD --no-p -e "sshpass -p password ssh" /path_to_local_files_on_android [email protected]:/path_on_remote_server

但我沒有看到你不應該選擇第一個選項的原因。

這是與所有SSH參數順利工作。如果你想使用rsync另一個端口上只使用選項:

... -e "ssh -p 10022 -i /path_to_your_private_key" ...

如果你尋求將擊鍵發送到Google Apps運行一般的方式,這是不可能的,如果你沒有root訪問權限並在此模式下運行您的應用程序。 您可以使用busybox運行該命令,但是如果busybox沒有實現的方法來接受擊鍵,這將不可能。您可以通過發送特定的命令,例如不需要按鍵操作並從本地文件中讀取它們,但這不適用於密碼。

爲此,您可以使用命令後面的「<」字符指定一個文本文件,並將其傳遞給應用程序。這是改變從本地文件讀取的「標準輸入」。

不過,使用公鑰/私鑰的系統更安全!