# Réception d’un fichier en SFTP

Nous allons maintenant mettre en place des transferts SFTP avec la Gateway. Pour ce faire, nous allons utiliser le serveur SSH local (OpenSSH) et le client sftp pour envoyer des fichiers vers la Gateway et en recevoir.

Pour pouvoir recevoir des fichiers, nous allons devoir ajouter un serveur SFTP à la Gateway, puis créer un utilisateur, et une règle de transfert.

## Création d’un serveur SFTP

Pour pouvoir recevoir des fichiers en SFTP avec la Gateway, nous allons commencer par ajouter un serveur SFTP :

    # waarp-gateway server add --name "sftp_server" --protocol "sftp" --address "127.0.0.1:2223"
    The server sftp_server was successfully added.

Pour créer un serveur, nous devons préciser son nom, le protocole de ce serveur, ainsi que des informations additionnelles pour paramétrer le serveur (ici l’adresse écoutée et le port).

Voir aussi

Plus d’options de configuration sont disponibles pour les serveurs sftp, notamment des options de sécurité.

Le détail des options est disponible ici

Nous devons maintenant ajouter une paire de clefs publique et privée pour le nouveau serveur. Nous pouvons utiliser `ssh-keygen` pour générer les clefs, puis nous les ajoutons au serveur SFTP :

    # ssh-keygen -t ssh-ed25519 -b 4096 -f gateway-sftp -N "" -C "Waarp Gateway SFTP server"
    Generating public/private rsa key pair.
    Your identification has been saved in gateway-sftp.
    Your public key has been saved in gateway-sftp.pub.
    The key fingerprint is:
    SHA256:9G/DHpBTvR7V093tNKPekc8MbmkqIQA16WHLkO8RdmU Waarp Gateway SFTP server
    The key's randomart image is:
    +---[RSA 4096]----+
    |     oo. .E      |
    |    + *...   .  *|
    |     O =.   . .+O|
    |      B. . o  .==|
    |     . oS =  .+o.|
    |      . . .=.o.*o|
    |         . .*.*.+|
    |          .o *   |
    |           .o    |
    +----[SHA256]-----+

    # waarp-gateway server cert "sftp_server" add --name "sftp_hostkey" --private_key "./gateway-sftp"
    The certificate sftp_server was successfully added.

Le serveur SFTP est maintenant créé mais n’est pas actif. Comme la Gateway doit écouter un nouveau port, il est nécessaire de la redémarrer :

    # systemctl restart waarp-gatewayd
    # systemctl status waarp-gatewayd
    * waarp-gatewayd.service - Waarp Gateway server
       Loaded: loaded (/usr/lib/systemd/system/waarp-gatewayd.service; disabled; vendor preset: disabled)
       Active: active (running) since Thu 2020-08-27 08:52:23 UTC; 5s ago
     Main PID: 20584 (waarp-gatewayd)
        Tasks: 6 (limit: 2850)
       Memory: 3.3M
       CGroup: /system.slice/waarp-gatewayd.service
               └─20584 /usr/bin/waarp-gatewayd server -c /etc/waarp-gateway/waarp-gatewayd.ini

Si tout s’est bien passé, la commande `status` devrait lister le nouveau serveur :

    # waarp-gateway -a "http://admin:admin_password@127.0.0.1:8080" status
    Server info: waarp-gatewayd/0.4.0
    Local date: Mon, 02 Jan 2006 16:04:05 CET

    Core services:
    [Active] Admin
    [Active] Controller
    [Active] Database

    Servers:
    [Active] sftp_server

    Clients: <none>

## Création d’un utilisateur

Pour pouvoir se connecter au serveur, nous devons maintenant créer un utilisateur. Cela se fait en créant un « compte local » dans la Gateway. Cet utilisateur aura `myuser` comme login et `mypassword` comme mot de passe :

    # waarp-gateway account local "sftp_server" add  --login "myuser" --password "mypassword"
    The account myuser was successfully added.

Nous pouvons essayer de nous connecter pour tester le paramétrage (entrez le mot de passe quand celui-ci est demandé) :

    # sftp -P 2223 myuser@localhost
    The authenticity of host '[localhost]:2223 ([127.0.0.1]:2223)' can't be established.
    The authenticity of host '[localhost]:2223 ([127.0.0.1]:2223)' can't be established.
    RSA key fingerprint is SHA256:9G/DHpBTvR7V093tNKPekc8MbmkqIQA16WHLkO8RdmU.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '[localhost]:2223' (RSA) to the list of known hosts.
    myuser@localhost's password:
    Connected to myuser@localhost.
    sftp> quit

Note

La demande de validation de la clef du serveur n’est demandée qu’une seule fois.

Pour calculer l’empreinte de la clef que nous avons généré ci-dessus, la commande `ssh-keygen -l -E sha256 -f gateway-sftp.pub` peut être utilisée. L’empreinte générée par la commande doit correspondre à celle transmise par le serveur.

L’utilisateur est créé. Pour pouvoir faire un transfert, nous devons maintenant créer une règle de transfert

## Ajout d’un règle

Les règles de transfert permettent de définir toutes les modalités liées à un transfert : le sens du transfert, les dossiers utilisés comme source et destination du fichier, les chaînes de traitement a exécuter avant ou après le transfert et en cas d’erreur.

Pour Waarp Gateway, tous les transferts doivent être associés à une règle. Cependant les clients ne peuvent pas fournir l’identifiant de la règle à utiliser (le protocole SFTP ne le supporte pas). Waarp Gateway utilise donc le chemin utilisé par le client. Quand celui-ci lit ou écrit un fichier, le dossier dans lequel ce fichier est situé est comparé aux chemins des règles (propriété `path`) pour déterminer la règle à utiliser. Si aucune règle n’est trouvée, le transfert est refusé.

Ici, nous voulons envoyer un fichier à la Gateway. La règle aura donc le sens `receive` (« réception ») : le sens des règles est toujours à prendre du point de vu de la Gateway (si on envoi un fichier à la Gateway, celle-ci le reçoit).

Assemblons tout dans une commande pour créer la règle :

    # waarp-gateway rule add --name "sftp_recv" --direction "receive" --path "sftp_recv"
    The rule sftp_recv was successfully added.

## Premier transfert

Maintenant que nous avons un serveur, un utilisateur et une règle, nous pouvons effectuer un transfert. Créons d’abord un fichier à transférer et envoyons le à la gateway :

    # echo "content of the file" > test.txt

    $ sftp -P 2223 myuser@localhost
    myuser@localhost's password:
    Connected to myuser@localhost.
    sftp> put test.txt sftp_recv/test01.txt
    Uploading test.txt to /sftp_recv/test01.txt
    test.txt                                                                                              100%   20     5.7KB/s   00:00
    sftp> quit

Après avoir établi une connexion avec la Gateway, nous avons déposé un fichier avec la commande `put` dans le dossier `sftp_recv` que nous avons défini ci-dessus comme le `path` de la règle `sftp_recv`.

Nous pouvons vérifier que le transfert s’est bien passé dans l’historique des transferts de la Gateway :

    $ waarp-gateway history list
    Transfers:
    * Transfer 1 (as server) [DONE]
        Way:             receive
        Protocol:        sftp
        Rule:            sftp_recv
        Requester:       myuser
        Requested:       sftp_server
        Local filepath:  /etc/waarp-gateway/in/test01.txt
        Remote filepath: /test01.txt
        Start date:      2020-08-27T10:10:05Z
        End date:        2020-08-27T10:10:05Z

Le fichier disponible est maintenant dans le dossier `in` de la Gateway. Comme nous n’avons pas spécifié de dossier spécifique dans la règle, c’est le dossier par défaut du service qui est utilisé :

    # ls -l /var/lib/waarp-gateway/in/
    total 4
    -rw-------. 1 waarp waarp, 20 Aug 27 10:10 test01.txt

Voir aussi

Plus d’informations sur la gestion des dossiers.