Echa un vistazo a las gemas Net::SCP y Net::SSH. El primero le permite recuperar un archivo utilizando una copia segura, y el segundo le permitirá encontrar fácilmente los nombres de los archivos disponibles para su recuperación. En Net :: SSH, ssh.exec!
será tu amigo.
De los documentos Net::SCP:
Net :: SCP implementa el protocolo cliente de SCP (Secure CoPy), permitiendo que los programas Ruby de transferir de forma segura y mediante programación archivos individuales o árboles de directorios completos desde y hacia los servidores remotos. Proporciona soporte para múltiples copias SCP simultáneas que trabajan en paralelo a través de la misma conexión, así como para copias seriales sincrónicas.
Net :: SCP también proporciona un URI abierta tie-in, por lo que puede utilizar el método abierto # Kernel para abrir y leer un archivo remoto:
# if you want to read from a URL voa SCP:
require 'uri/open-scp'
puts open("scp://[email protected]/path/to/file").read
De los documentos Net::SSH:
require 'net/ssh'
Net::SSH.start('host', 'user', :password => "password") do |ssh|
# capture all stderr and stdout output from a remote process
output = ssh.exec!("hostname")
Agregue end
al código anterior para cerrar el bloque. Dentro del bloque, output
contendrá los resultados del comando que envió.
Una alternativa a la recuperación de archivos a través de Ruby desde la máquina que contiene los archivos, sería hacer que Ruby inicie la transferencia directamente desde la máquina que aloja los archivos y los envíe a través de scp
a la otra máquina.
En lugar de usar Net :: SCP y Net :: SSH, puede usar Net::SFTP, para administrarlo todo en una gema. También depende de una conexión segura, pero es posible que SFTP no esté disponible para usted. Las clases y los documentos Net::SFTP::Operations::Dir
y Net::SFTP::Operations::Download
serán su amigo.
Otras opciones incluyen el uso del estándar rsync
en un shell simple como @tadman mencionado. Hay una multitud de formas de lograr esto, y es una necesidad común en entornos de alojamiento.
cualquier otro mejor enfoque?
rsync
, en la línea de comandos. Es muy inteligente y puede mover carpetas y deltas de archivos si es necesario. Además, "How to transfer files using ssh and Ruby" y su enlace a "Ruby file upload ssh intro".
recomendación de Melding @ tadman rsync
con Ruby, hay "Cheapest rsync replacement (with Ruby)".
Algunas compañías no permiten el acceso clave. Es un dolor tener que lidiar con contraseñas, pero también es parte de su política de seguridad. –
Algunas empresas tienen departamentos de TI dotados de trolls también. Las contraseñas pueden adivinarse. Las llaves tienen que ser robadas. – tadman
Eso puede ser. El hecho es que algunos lugares requieren contraseñas. –