Rsync en android

Finalmente soy capaz de ejecutar super comandos de usuario en el programa android. Ahora quiero rsync unos pocos archivos de mi teléfono a mi portátil y aquí viene el problema. Rsync necesita contraseña para ser dado y no estoy entendiendo cómo dar la contraseña de mi portátil a este programa android. Hay formas en las que rsync puede hacerse utilizando claves privadas / públicas. Pero lo que quiero en general es que ¿cómo puedo alimentar la entrada a rsync o para que cualquier cuestión de comando a través del teclado … Aquí estoy adjuntando mi programa …

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); } } } 

En lo anterior estoy tratando de hacer rsync desde mi teléfono a mi portátil .. el comando anterior pediría la contraseña, pero no estoy entendiendo cómo dar entrada a este programa android

Si rsync pide contraseña (esperando la entrada del usuario), puede escribirla desde java al proceso de ejecución ("simular" la entrada de teclado)
Como Can Java Runtime.exec otro programa java que utiliza stdin?

Esta es la salida cuando se ejecuta rsync en shell android sin ningún argumento

Hay un fichero -password-file = FILE pero no veo ninguna forma directa de establecer la contraseña


 # Rsync
 Versión del protocolo rsync versión 3.0.6 30
 Copyright (C) 1996-2009 por Andrew Tridgell, Wayne Davison, y otros.
 Sitio web: http://rsync.samba.org/
 Capacidades:
     Archivos de 64 bits, inums de 64 bits, marcas de tiempo de 32 bits, longitudes de 64 bits,
     No socketpairs, enlaces duros, enlaces simbólicos, IPv6, batchfiles, inplace,
     Añadir, sin ACL, xattrs, iconv, symtimes

 Rsync viene con ABSOLUTAMENTE NINGUNA GARANTÍA.  Esto es software libre, y tú
 Son bienvenidos a redistribuirlo bajo ciertas condiciones.  Vea el GNU
 Licencia Pública General para más detalles.

 Rsync es un programa de transferencia de archivos capaz de una eficiente actualización remota
 A través de un algoritmo de diferenciación rápida.

 Uso: rsync [OPCIÓN] ... SRC [SRC] ... DEST
   O rsync [OPCIÓN] ... SRC [SRC] ... [USER @] HOST: DEST
   O rsync [OPCIÓN] ... SRC [SRC] ... [USER @] HOST :: DEST
   O rsync [OPCIÓN] ... SRC [SRC] ... rsync: // [USER @] HOST [: PORT] / DEST
   O rsync [OPCIÓN] ... [USER @] HOST: SRC [DEST]
   O rsync [OPCIÓN] ... [USER @] HOST :: SRC [DEST]
   O rsync [OPCIÓN] ... rsync: // [USER @] HOST [: PORT] / SRC [DEST]
 Los usos ':' se conectan a través del shell remoto, mientras que los usos '::' y 'rsync: //' se conectan
 A un daemon de rsync, y requieren SRC o DEST para comenzar con un nombre de módulo.

 Opciones
  -v, --verbose aumentar verbosidad
  -q, --quiet suprime mensajes que no son de error
      --no-motd suprime daemon-mode MOTD (vea la advertencia de la página de manual)
  -c, --checksum saltar basado en la suma de comprobación, no mod-tiempo & tamaño
  -a, --archive modo de archivo;  Es igual a -rlptgoD (no -H, -A, -X)
      --no-OPTION desactivar una OPCIÓN implícita (por ejemplo, --no-D)
  -r, --recursive recurse en directorios
  -R, --relative usan nombres de ruta relativos
      --no-implied-dirs no envía dirs implicados con --relative
  -b, --backup hacer copias de seguridad (ver --suffix & --backup-dir)
      --backup-dir = DIR hace respaldos en la jerarquía basada en DIR
      --suffix = SUFFIX define el sufijo de copia de seguridad (por defecto ~ w / o --backup-dir)
  -u, --update saltar archivos que son más recientes en el receptor
      --inplace los archivos de destino de actualización en el lugar (VER PÁGINA DE MAN)
      --Ajude anexar datos a archivos más cortos
      --append-verify como --append, pero con datos antiguos en la suma de comprobación del archivo
  -d, --dirs transferir directorios sin recursar
  -l, - enlaces copian enlaces simbólicos como enlaces simbólicos
  -L, --copy-links transforma el enlace simbólico en un archivo / directorio de referencia
      --copy-unsafe-links solo los enlaces simbólicos "inseguros" se transforman
      --safe-links ignora los enlaces simbólicos que apuntan fuera del árbol de fuentes
  -k, --copy-dirlinks transforma el enlace simbólico a un dir en dir referent
  -K, --keep-dirlinks trata el directorio simbólico en el receptor como dir
  -H, --hard-links preservar vínculos duros
  -p, --perms preserve permissions
  -E, --executability preservar la ejecutabilidad del archivo
      --chmod = CHMOD afectan archivos y / o permisos de directorio
  -X, --xattrs preservar atributos extendidos
  -o, - owner propietario de conservación (sólo superusuario)
  -g, --grupo preservar grupo
      --dispositivos de conservación de los archivos del dispositivo (solo superusuario)
      --specials preservar archivos especiales
  -D mismo que --dispositivos --peciales
  -t, --times conservan los tiempos de modificación
  -O, --omit-dir-times omite los directorios de --times
      --super receptor intenta actividades de superusuario
      --fake-super store / recuperar privilegiado attrs utilizando xattrs
  -S, --pareja manejar archivos escasos eficientemente
  -n, --dry-run realiza una prueba sin cambios
  -W, --whole-file copiar archivos entero (sin delta-xfer algoritmo)
  -x, --one-file-system no cruzan los límites del sistema de archivos
  -B, --block-size = SIZE forzar un bloque de comprobación de tamaño de bloque
  -e, --rsh = COMMAND especifica el shell remoto a utilizar
      --rsync-path = PROGRAMA especifica el rsync para ejecutar en la máquina remota
      --existing skip creación de nuevos archivos en el receptor
      --ignore-existing skip actualización de archivos que ya existen en el receptor
      --remove-source-files remitente elimina archivos sincronizados (no-dirs)
      --del un alias para --delete-during
      --delete borrar archivos extraños de dirs de destino
      --delete-before receiver elimina antes de la transferencia, no durante
      --delete-durante el borrado del receptor durante la transferencia (predeterminado)
      --delete-delay busca supresiones durante, delete after
      --delete-after receptor elimina después de la transferencia, no durante
      --delete-excluded también elimina archivos excluidos de dirs de destino
      --ignore-errors borrar incluso si hay errores de E / S
      --force la supresión de la fuerza de directorios incluso si no vacía
      --max-delete = NUM ​​no elimina más de NUM archivos
      --max-size = SIZE no transfiere ningún archivo mayor que SIZE
      --min-size = SIZE no transfiere ningún archivo más pequeño que SIZE
      --parcial mantener archivos parcialmente transferidos
      --partial-dir = DIR coloca un archivo parcialmente transferido en DIR
      --delay-updates pone todos los archivos actualizados en su lugar al final de la transferencia
  -m, --prune-empty-dirs Elimina las cadenas de directorios vacías de la lista de archivos
      --numeric-ids no asigna valores de uid / gid por nombre de usuario / grupo
      --timeout = SECONDS establece el tiempo de espera de E / S en segundos
      --contimeout = SECONDS establece el tiempo de espera de la conexión del daemon en segundos
  -I, --ignore-veces no salte archivos que coinciden en tamaño y mod-time
      --size-only skip archivos que coinciden en tamaño
      --modify-window = NUM ​​comparar mod-times con una precisión reducida
  -T, --temp-dir = DIR crea archivos temporales en el directorio DIR
  -y, --fuzzy encontrar archivo similar para la base si no hay ningún archivo dest
      --compare-dest = DIR también compara archivos de destino en relación con DIR
      --copy-dest = DIR ... e incluye copias de archivos no cambiados
      --link-dest = DIR enlace directo a los archivos en DIR cuando no ha cambiado
  -z, --comprimir archivos comprimidos durante la transferencia
      --compress-level = NUM ​​establece explícitamente el nivel de compresión
      --skip-compress = LIST omite la compresión de archivos con un sufijo en LIST
  -C, --cvs-exclude auto-ignore archivos de la misma manera que CVS
  -f, --filter = RULE agrega una regla de filtrado de archivos
  -F igual que -filter = 'dir-merge /.rsync-filter'
                              Repetido: --filter = '- .rsync-filter'
      --exclude = PATTERN excluir archivos que coincidan PATTERN
      --exclude-from = FILE leer excluir patrones de FILE
      --include = PATTERN no excluye los archivos que coinciden PATTERN
      --include-from = FILE read incluye patrones de FILE
      --files-from = FILE lee la lista de nombres de archivos de origen de FILE
  -0, --from0 todos los archivos * -from / filter están delimitados por 0s
  -s, --protect-args no división de espacio;  Sólo comodín caracteres especiales
      --address = ADDRESS dirección de enlace para el socket de salida a daemon
      --port = PORT especifica el número de puerto alternativo de doble-colon
      --sockopts = OPCIONES especifica opciones TCP personalizadas
      --blocking-io utiliza E / S de bloqueo para el shell remoto
      --stats da algunas estadísticas de transferencia de archivos
  -8, -8-bit-output deja caracteres de alto-bit sin salir de la salida
  -h, - números de salida legibles por humanos en un formato legible por humanos
      --progreso mostrar el progreso durante la transferencia
  -P igual que --parcial --progreso
  -i, --itemize-changes produce un resumen de cambios para todas las actualizaciones
      --out-format = FORMAT actualizaciones de salida utilizando el FORMATO especificado
      --log-file = FILE registra lo que estamos haciendo al archivo especificado
      --log-file-format = Actualizaciones del registro de FMT usando el FMT especificado
      --password-file = FILE lee la contraseña de acceso al daemon desde FILE
      --list-only lista los archivos en lugar de copiarlos
      --bwlimit = límite de KBPS ancho de banda de E / S;  KBytes por segundo
      --write-batch = FILE escribe una actualización por lotes en FILE
      --only-write-batch = FILE como --write-batch pero sin actualizar destino
      --read-batch = FILE lee una actualización por lotes de FILE
      --protocol = NUM ​​fuerza una versión de protocolo más antigua que se va a utilizar
      --iconv = CONVERT_SPEC solicitud charset conversión de nombres de archivo
  -4, --ipv4 prefiere IPv4
  -6, --ipv6 prefiere IPv6
      - versión versión de impresión de versión
 (-h) --help muestra esta ayuda (-h funciona sin otras opciones)

 Utilice "rsync --daemon --help" para ver las opciones de la línea de comandos del daemon-mode.
 Consulte las páginas de manual rsync (1) y rsyncd.conf (5) para obtener la documentación completa.
 Consulte http://rsync.samba.org/ para obtener actualizaciones, informes de errores y respuestas
 Rsync error: sintaxis o error de uso (código 1) en main.c (1407) [cliente = 3.0.6]

Asumiendo que tiene un daemon rsync en su computadora portátil, puede usar la variable de entorno RSYNC_PASSWORD o la opción –password-file .

Desde la página de manual:

Puede evitar la solicitud de contraseña estableciendo la variable de entorno RSYNC_PASSWORD en la contraseña que desea utilizar o mediante la opción –password-file . Esto puede ser útil cuando se ejecuta scripts en rsync.

–password-file Esta opción le permite proporcionar una contraseña en un archivo para acceder a un daemon rsync remoto. Tenga en cuenta que esta opción sólo es útil cuando se accede a un daemon de rsync utilizando el transporte incorporado, no cuando se utiliza un shell remoto como transporte. El archivo no debe ser legible en todo el mundo. Debe contener sólo la contraseña como una sola línea.

Como menciona, el uso de clave pública / privada es una alternativa, pero esta es la opción más segura y óptima. Incluso en Android es fácil de configurar:

Normalmente tienes una carpeta .ssh en la casa del usuario, pero en Android no puedes usarla (depende del usuario que ejecuta el script y en Android cada aplicación se ejecuta con otro nombre de usuario).

Rsync tiene su propio servicio, pero es comúnmente utilizado sólo con SSH. Puede utilizar cualquier parámetro SSH en Rsync con la opción -e. En su caso particular, SSH tiene la opción -i para especificar una clave privada para autenticar, en caso de que funcione SSH (y por lo tanto Rsync) no pedirá la contraseña.

En su caso esto debería ser así:

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

A continuación, debe anexar su clave pública a la ~ / .ssh / authorized_keys2 de su máquina de destino, en este ejemplo /home/user1/.ssh/authorized_keys2/path_to_your_private_key "

Otra opción insegura y NO recomendada es usar sshpas para ingresar directamente su contraseña:

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

Pero no veo la razón por la que no debe elegir la primera opción.

Esto está trabajando BTW con todos los parámetros de SSH. Si desea utilizar Rsync en otro puerto, simplemente use la opción:

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

Si busca una forma general de enviar pulsaciones de teclas a las aplicaciones que ejecuta, esto no es posible si no tiene acceso root y ejecuta la aplicación en este modo. Puede ejecutar el comando con busybox, pero si busybox no tiene una forma implementada para aceptar pulsaciones de teclas esto no será posible. Aunque puede enviar un comando específico, no requiere pulsaciones de teclado y leerlas desde un archivo local, por ejemplo, pero esto no funciona en el caso de las contraseñas.

Para hacerlo, puede utilizar el comando "<" después del comando para especificar un archivo de texto con las claves que se pasarán a la aplicación. Este es el cambio de la "entrada estándar" para leer de un archivo local.

Sin embargo, el sistema con clave pública / privada es mucho más seguro!

Puede ser que usted podría utilizar una biblioteca rsync java como http://jarsync.sourceforge.net/

Hola amigos y amantes de rsync he encontrado un ejemplo de trabajo de rsync para Android http://androidappprograms.blogspot.in/2013/10/rsync-working-example-android.html

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.