usar transferir script por para example enviar ejemplo conexion como comandos archivos linux bash ssh centos sftp

script - ¿Cómo transferir datos a un archivo remoto a través de SFTP sin almacenar datos en un archivo local en Linux Bash?



sftp shell script example (3)

Necesito poder transferir datos de la memoria a un archivo remoto a través de SFTP. Originalmente tuve esto funcionando a través de SSH, y mientras trabajaba, descubrí que no tengo acceso SSH a la ubicación remota, solo acceso a SFTP.

Aquí hay un ejemplo del código SSH original que tuve:

echo "secret_data" | ssh root@localhost cat > secret_file;

Esto es exactamente lo que necesito, pero en algún tipo de forma de:

sftp root@localhost put $secret_data secret_file;

En principio, necesito que los datos nunca se almacenen en un archivo en la máquina local y se traten por completo desde la memoria.

Cualquier respuesta apreciada. Gracias.


Cree la partición tmpfs en /etc/fstab (no almacenada en la unidad, solo en la memoria), almacene el archivo allí y luego use el método descrito si realmente desea evitar almacenar el archivo en su disco duro.

Configuré de esta manera /tmp y /var/log para evitar escribir en todo el disco SSD:

# <file system> <mount point> <type> <options> <dump> <pass> none /tmp/ tmpfs size=15% 0 0


El cliente multiprotocolo lftp admite explícitamente la lectura de contenido desde un descriptor de archivo no buscable:

#!/bin/bash # ^^^^ some features used here are not present in /bin/sh lftp / -u remote_username / -e ''put -o /tmp/secret /dev/stdin'' / sftp://remote_host / < <(printf ''%s'' "$secret_data")

Tenga en cuenta el uso de <() en lugar de <<< (este último puede, en algunas situaciones, implementarse escribiendo un archivo temporal; el primero será una redirección de estilo /dev/fd en Linux moderno, o puede implementarse) con un FIFO en algunas otras plataformas).


Si es permisible usar su propia copia pirateada de sftp, puede usar

echo "my secret data 2" | (exec 6<&0 ; ( echo put /proc/self/fd/6 /tmp/secret | sftp user@remote_host))

El ejecutivo redirecciona el stdin, que transporta su secreto, a otro descriptor de archivo, en este caso, 6. El segundo echo emite el comando sftp para ejecutar. Utiliza el sistema de archivos /proc/ magic, la redirección / proc / self a /proc/<pid> del proceso que la abre, y el nombre proc/<pid>/fd/6 del descriptor de archivo 6, y copias los datos que lee de allí a un archivo en su host remoto.

Sería mucho más fácil si pudieras usar una versión pirateada de scp, esto leería

echo "my secret data 2" | scp /proc/self/fd/0 user@remote_host:/tmp/secret

Ahora para el truco: sftp y scp asegúrese de que el archivo local sea un archivo normal, pero los descriptores de archivo / proc / self / fd / ... son pipes. Debe desactivar las verificaciones en el código fuente.

Para sftp, debe modificar el archivo sftp-client.c: Encuentre todas las ocurrencias de S_ISREG(...) y reemplácelas con 1

Esto es rápido y sucio y puede dejarlo abierto a las vulnerabilidades de seguridad si no revisa regularmente los mensajes de seguridad de openssh y recompila si es necesario. Una mejor manera sería usar un lenguaje de scripting con una biblioteca sftp bien mantenida y usar eso.