Descargar archivos de un servidor Linux con transfer.sh

En estos dorados tiempos de servidores en la nube y servicios distribuidos en plataformas donde realmente ya no tenemos acceso físico a los servidores uno de los problemas más absurdos que me he encontrado es cómo sacar un archivo de un servidor al que no puedo conectar una memoria USB. No, instalar un servidor FTP para descargar un archivo no es la solución.

Estoy hablando por supuesto de servidores Linux a los cuales únicamente tenemos acceso mediante una sesión de SSH. A lo largo de los años he visto algunas soluciones utilizando cp e incluso algunas herramientas como xcopy pero para fines prácticos es difícil de replicar cada vez que se necesita sacar un volúmen importante de información.

transfer.sh al rescate

He de aclarar que esta solución no es escalable ni debiera utilizarse en entornos productivos / corporativos. Esta solución está pensada para quienes administran sus propios servidores y necesitan descargar algún archivo pesado de forma esporádica. ¿Por qué no debe utilizarse en entornos productivos, alguien se preguntará? Esta solución lo que hace es básicamente tomar el archivo que deseamos sacar del servidor y lo sube a un sitio intermediario mediante un script que nos devuelve un link para descargarlo de forma abierta desde cualquier otra ubicación siempre y cuando conozcamos el link. Es un riesgo de seguridad enorme y por lo tanto no apto para el manejo de información sensible y / o privada.  

Está de sobra decirlo pero requisito indispensable es que nuestro servidor tenga acceso a internet para que esto funcione. Segundo, necesitamos ubicarnos en la carpeta donde se encuentra el archivo que deseamos descargar de nuestro servidor. Si se trata de una carpeta o un grupo grande de archivos, lo recomendable es crear un tarball o archivo .tar.gz con nuestra carpeta o grupo de archivos para un transporte fácil hacia afuera.

Para fines prácticos y de demostración, estoy creando un archivo de texto en un servidor remoto.

Y al listar el contenido del directorio puedo ver el_archivo.txt dentro del mismo.

La bondad de transfer.sh es que funciona tanto para un archivo de texto de un par de bytes como para archivos de varios gigabytes sin ningún problema. Desde la línea de comando entonces voy a utilizar la herramienta curl para subir mi archivo a transfer.sh y obtener un link de descarga para el mismo. La sintaxis es extremadamente sencilla:

curl --upload-file el_archivo.txt https://transfer.sh/el_archivo.txt

Dependiendo del tamaño de mi archivo y el ancho de banda disponible para mi servidor la operación tomará desde unos segundos hasta un par de minutos. Al finalizar obtendremos como respuesta el link de descarga para el archivo que hayamos subido.

No es la herramienta más sofisticada como podemos apreciar en el resultado. Un nada ceremonioso link es la respuesta que debemos anotar. Este link lo utilizamos desde fuera de nuestro servidor y el resultado será una copia íntegra de lo que sea que hayamos sacado de nuestro servidor: