# Dépôt de fichiers temporaire sécurisé
2021-01-01T21:07:51Z
Au cours d'une discussion via IRC ou par mail, on a besoin de partager un fichier. Pour le texte, il y a les pastebin. Pour les photos ou les vidéos, il existe différents hébergeurs en ligne.

Plutôt que de confier ces données, parfois personnelles, à un tiers, pourquoi ne pas héberger sur un serveur de confiance ces fichiers? Il suffit d'un serveur SSH. Ce dernier peut être à la maison, mais pour l'exemple, j'ai choisi d'utiliser une session chez tilde.town.

En bref, ça ressemblerait à ça : 

```
$ bitput Activite_1.pdf
Connected to tilde.
sftp> put Activite_1.pdf public_html/stuff/20acf0c6211609509262.pdf
Uploading Activite_1.pdf to /home/prx/public_html/stuff/20acf0c6211609509262.pdf
Activite_1.pdf                                                       100% 1162KB 739.1KB/s   00:01
sftp> chmod 666 public_html/stuff/20acf0c6211609509262.pdf
Changing mode on /home/prx/public_html/stuff/20acf0c6211609509262.pdf
https://tilde.town/~prx/stuff/20acf0c6211609509262.pdf
```

=> http://tilde.town/

## Script d'upload

Voici un script qui prend en argument un fichier pour l'envoyer sur le serveur avec sftp. Oui, sftp, pas scp, car c'est censé être plus fiable. La vraie raison est que certains serveurs peuvent proposer par souci de sécurité seulement un accès sftp dans un chroot, sans aucun accès à un shell nécessaire à scp.

Voici quelques options qu'il faudra modifier selon votre cas, notamment la variable "sshcred" selon ce que vous avez configuré dans "~/.ssh/config"

```
sshcred="tilde"
url="https://tilde.town/~prx/stuff"
outdir="public_html/stuff"
```

Ensuite, on récupère l'extension du fichier:

```
# if file has extension
case "${1}" in
    *.*) ext=".${1##*.}" ;;
    *) ext="" ;;
esac
```

Et on crée un nom de fichier aléatoire en utilisant la date pour éviter la faible probabilité d'avoir 2 fichiers de même nom:

```
rdm="$(openssl rand 5 -hex)$(date +%s)"
out="${rdm}${ext}"
```

Enfin, on uploade et on s'assure que le fichier est bien lisible par le serveur http:


```
(
printf "put %s %s\n" "${1}" "${outdir}/${out}"
printf "chmod 666 %s\n" "${outdir}/${out}"
) | sftp "${sshcred}"
```

On termine par afficher l'url à partager:

```
printf "%s\n" "${url}/${out}"
```

## ~/.ssh/config

Pour pouvoir se connecter juste en écrivant "ssh tilde":

```
Host tilde
        HostName tilde.town
        User prx
        Port 22
        IdentityFile ~/.ssh/sshkey
        PasswordAuthentication no
        PubkeyAuthentication yes
```

## Nettoyage

Pour éviter de garder les fichiers les plus anciens, on peut créer une tâche cron sur le serveur avec "crontab -e". J'ai personnellement décidé de supprimer les fichiers plus vieux que 2 jours.

```
@daily find /home/prx/public_html/stuff/ -type f -mtime +2 -delete
```

## Une réaction?

=> mailto:bla@bla.si3t.ch?subject=depot-de-fichier-temporaire-securise 📧 Envoyez votre commentaire par mail.
=> mailto:bla+subscribe@bla.si3t.ch 📫 Abonnez-vous pour recevoir les réponses
=> /log/commentaires/ 📚 Consultez les archives.
=> mailto:bla+unsubscribe@bla.si3t.ch 💨 Vous désinscrire