Scambio di file via terminale, la via semplice!

https://transfer.sh

Era da un po’ che cercavo un sistema semplice per passare file da un pc ad un altro senza dover passare da programmi di posta, cloud, condivisioni di chiavi, webserver improvvisati ecc ecc.

La cosa che mi premeva di piu’ era proprio poter fare tutto da terminale e dopo svariati tentativi (compreso webfs che comunque ha il suo perche’) becco questo servizio!

E’ opensource, gratuito e presente su github (per chi volesse contribuire).

In pratica da shell si invia il file al loro server che lo tiene per 336 ore restituendo un link per il download. Semplice e funzionale! Ovvio che chi ha il link puo scaricare il file quindi non e’ adatto a contenuti sensibili… Ma se il file fosse CIFRATO con GPG PRIMA dell’invio?

Beh, a me e’ piaciuto talmente tanto che ho scritto due semplici script sulla base dei loro esempi e ne sono contento.

Gli script sono i seguenti:

aba-transfer

# !/bin/bash    
# Controllo se c'e' un pipe allo script
if [ -p /dev/stdin ]; then # Pipe di un contenuto
    #file="$(echo $RANDOM| md5sum | head -c 8;echo).aba" # genero nome casuale 
    file="aba-transfer_$(date +%Y-%m-%d_%H-%M-$S).aba" # nome con un senso
    file_name="$file"
    cat >> $file
    echo "Creo QUI il file $file_name prima dell'invio"
else # stdin
    if [ -n "$1" ];then 
        file="$1"
        file_name=$(basename "$1")
        if [ ! -e "$file" ];then 
            echo -e "$file: No such file or directory">&2
            return 1
        fi
    else
        echo -e "Usa il servizio opensource <<< www.transfer.sh >>> per inviare file IN CHIARO su un server esterno e propone un link per il download da remoto.\nPer inviare i file cifrati con GPG utilzzare altro script ---aba-transfer-gpg---\n\nEs: aba-transfer <file|directory>\n... | aba-transfer <file_name>"
        exit 0
    fi
fi

if [ -d "$file" ];then # Se e' una directroy la zippa 
    file_name="$file_name.zip" 
    echo "Invio di una cartella, creo zip file $file_name ed invio..."
    ADDRESS=$((cd "$file"&& zip -r -q - .) | curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name" | tee /dev/null)
else # File
    echo "Invio di $file_name..."
    ADDRESS=$(cat "$file"|curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name"|tee /dev/null)
fi
echo -e "\nSalvo su ~/transfer_history.txt\n"
echo "$(date +%Y-%m-%d_%H-%M-%S) $ADDRESS $file" >> ~/transfer_history.txt
echo -e "Per scaricare:\ncurl $ADDRESS -o $file_name"

E lo stesso ma con la cifratura diretta via chiave gpg.

aba-transfer-gpg

# !/bin/bash    
# Controllo se c'e' un pipe allo script
if [ -p /dev/stdin ]; then # Pipe di un contenuto
    #file="$(echo $RANDOM| md5sum | head -c 8;echo).aba" # genero nome casuale 
    file="aba-transfer_$(date +%Y-%m-%d_%H-%M-%S).aba"
    file_name="$file"
    cat >> $file
    echo "Creo QUI il file $file_name prima dell'invio (SALVATO NON CIFRATO!)"
else # stdin
    if [ -n "$1" ];then 
        file="$1"
        file_name=$(basename "$1")
        if [ ! -e "$file" ];then 
            echo -e "$file: No such file or directory">&2
            return 1
        fi
    else
        echo -e "Usa il servizio opensource << www.transfer.sh >> per inviare file CIFRATO con GPG su un server esterno e propone un link per il download da remoto.\n\nEs: aba-transfer <file|directory>\n... | aba-transfer <file_name>"
        exit 0
    fi
fi

if [ -d "$file" ];then # Se e' una directroy la zippa 
    file_name="$file_name.zip" 
    echo "Invio di una cartella, creo zip file $file_name, lo cifro con GPG e lo invio..."
    ADDRESS=$((cd "$file" && zip -r -q - .) |gpg -ac -o-| curl -X PUT --progress-bar --upload-file "-" "https://transfer.sh/$file_name.gpg" | tee /dev/null)
else # File
    echo "Invio di $file_name cifrato con GPG..."
    ADDRESS=$(cat "$file"|gpg -ac -o-|curl -X PUT --progress-bar --upload-file "-" "https://transfer.sh/$file_name.gpg"|tee /dev/null)
fi
echo -e "\nSalvo su ~/transfer_history.txt\n"
echo "$(date +%Y-%m-%d_%H-%M-%S) $ADDRESS $file" >> ~/transfer_history.txt
echo -e "Per scaricare il file CIFRATO:\ncurl $ADDRESS -o $file_name.gpg\n"
echo -e "Per scaricare e DECIFRARE DIRETTAMENTE il file:\ncurl $ADDRESS | gpg --decrypt -o $file_name"

Per cifrarlo e’ necessario avere sul sistema opengpg funzionante con le chiavi impostate, mentre per de-cifrarlo sugli altri sistemi e’ sufficiente la password che si imposta al momento della creazione e la chiave pubblica.

See You!