SFTP “without source file”

I needed to create a script to send a file over SFTP, but with a particularity, the data only existed in memory, in a bash script variable, in other words, the file didn’t exist on disk.

To do that, I used the LFTP command instead of the traditional sftp. LFTP is a command line ftp/http client that allows us to write the FTP commands (get, put, ls, etc.) using command line parameter (-e option).

The example script

#!/bin/bash
FILE_DATA="[YOUR FILE DATA]"
HOST='REMOTE.SFTP.ADDRESS'
PORT='22'
REMOTE_FILE='REMOTE_PATH/FILE_NAME'
USER='xxxx'
PASS='xxxx'
lftp -e "put /dev/stdin -o $REMOTE_FILE" -u "$USER,$PASS" -p $PORT "sftp://$HOST" < <(printf "%s" "$FILE_DATA")

How does it work?

1) The command printf “%s” “$FILE_DATA” writes the variable FILE_DATA content to the standard input (/dev/stdin) using the “<” operator.

2) The LFTP command connects to the specified host and port using the sftp protocol.

3) The LFTP command executes the FTP command put /dev/stdin -o $REMOTE_FILE on the connected sftp sending the source file, that in this case is the standard input (/dev/stdin), to the destination server .


SFTP “sem arquivo de origem” (pt_BR)

Precisei criar um script para envio de arquivos por SFTP, mas com uma particularidade, os dados estavam apenas em memória, em uma variável do script bash, ou seja, o arquivo não existia no disco.

Para fazer isso usei o LFTP ao invés do tradicional sftp. LFTP é um cliente ftp/http que permite passar os comandos de FTP (get, put, ls, etc.) como parâmetro na sua execução (opção -e).

Script de exemplo

#!/bin/bash
FILE_DATA="[YOUR FILE DATA]"
HOST='REMOTE.SFTP.ADDRESS'
PORT='22'
REMOTE_FILE='REMOTE_PATH/FILE_NAME'
USER='xxxx'
PASS='xxxx'
lftp -e "put /dev/stdin -o $REMOTE_FILE" -u "$USER,$PASS" -p $PORT "sftp://$HOST" < <(printf "%s" "$FILE_DATA")

Como funciona

1) O comando printf “%s” “$FILE_DATA” escreve o conteúdo da variável FILE_DATA para o standard input (/dev/stdin) usando o operador “<”.

2) O LFTP conecta no host e porta especificados usando o protocolo sftp.

3) O LFTP executa o comando FTP put /dev/stdin -o $REMOTE_FILE no sftp conectado, enviando o arquivo de origem, que é justamente o standard input (/dev/stdin), para o caminho/arquivo remoto.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.