Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Proxy SFTP

Le backend sftp range les fichiers sur un serveur SFTP amont, joint en SSH sous un compte de service que les utilisateurs ne connaissent pas.

[[backends]]
name = "acme-amont"
type = "sftp"
host = "sftp.acme.example"
host_key_fingerprint = "SHA256:2hZbXq1b5Xb3vN2mQ6w7l3Fv0tXk4yJ8aUeYp9rS0cE"   # verifiee hors bande

[backends.auth]
type = "password"
username = "relais"
password = "changez-moi"

[[roles]]
name = "acme"

[[roles.mounts]]
backend = "acme-amont"
home_dir = "/depot"
acl = [{ path = "/", rights = ["read", "write", "list"], recursive = true }]

Un client du role acme envoie /f.txt : le fichier est /depot/f.txt sur l’amont.

Les cles

Toutes les cles : Reference [[backends]] type = “sftp” ; cles communes : Les backends. Authentification par cle :

[backends.auth]
type = "private_key"
username = "relais"
private_key_pem = """
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
"""

Preferez une cle ed25519 ou ECDSA. Une cle RSA signe en rsa-sha2-512 ou rsa-sha2-256 selon server-sig-algs, ssh-rsa (SHA-1) en dernier recours.

La cle d’hote de l’amont

Le proxy verifie la cle d’hote de l’amont avant de s’authentifier : sans cela, un intermediaire recevrait les identifiants du compte de service. L’empreinte :

ssh-keyscan -p 22 sftp.acme.example | ssh-keygen -lf -
  • Epinglez l’empreinte ED25519, a defaut ECDSA, a defaut RSA : c’est l’ordre dans lequel le proxy negocie.
  • Verifiez-la hors bande : sur l’amont, ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub.
  • sha256: en minuscules et le bourrage = final sont acceptes.
  • Une cle presentee sous forme de certificat est jugee sur la cle qu’il certifie.
  • Rotation : une empreinte par backend ; changez-la a la bascule, le rechargement des roles l’applique aux connexions suivantes.

Les envois

Avec hidden_stores.enabled = true, un envoi ecrit dans un fichier en cours de transfert sur l’amont, a cote de la destination, puis le publie :

EtapeRequete a l’amontreplaced
1SSH_FXP_RENAME du fichier en cours sur la destination ; reussi si elle est libreno
2destination prise : posix-rename@openssh.com, atomique, sur un second canal SFTP ouvert au premier ecrasementyes
3sans cette extension ni second canal : suppression de la destination, puis renommageyes

A l’etape 3, la destination manque le temps d’un aller-retour. Sans hidden_stores, l’envoi ecrit dans la destination, et la reprise et l’ajout sont servis (Uploads).

Le compte de service peut creer, renommer et supprimer dans le repertoire de destination. Un ecrasement remplace l’inode (mode, proprietaire, ACL, attributs etendus perdus) et occupe deux fois la place jusqu’a la publication.

Les cles communes sur un proxy SFTP

CleSur un proxy SFTP
home_dir (montage)un chemin absolu sur l’amont
create_home (montage)sans effet : home_dir existe sur l’amont
hidden_storesun fichier en cours de transfert sur l’amont, publie par renommage
stale_partialsle balayage de ces fichiers sur l’amont, juge sur l’horloge de l’amont par un fichier sonde ; au demarrage, il attend la connexion 30 s au plus
cross_instance_reservationun fichier verrou chez l’amont, a cote de la destination ; true par defaut, Windows compris
lock_prefixle nom de ces verrous ; un autre prefixe, sans point en tete, convient a un amont qui refuse le nom par defaut
case_insensitivefalse par defaut : le systeme de fichiers de l’amont n’est pas visible d’ici ; un amont Windows ou macOS veut true

Performances et limites

  • Lecture : une requete READ en vol par handle ; une lecture a la suite de la precedente est servie depuis le bloc deja lu. Un telechargement dans l’ordre lit le fichier environ une fois sur l’amont.
  • Ecriture : des paquets aussi grands que l’amont les accepte, huit en vol.
  • Une connexion SSH par session SFTP et par requete REST : la poignee de main pese sur les requetes REST courtes.
  • Le proxy parle SFTP v3 (statuts 0 a 8), comme OpenSSH.
  • Les liens de l’amont ne sont pas distingues : stat suit un lien, un listage ne marque aucune entree comme lien.

Ce que vous verrez

QuandLigne
ouverture d’une sessionINFO SFTP proxy: connecting, champs host, port
cle d’hote verifieeINFO SFTP proxy: host key verified, champs upstream, fingerprint
session preteINFO SFTP proxy: connected and ready, champs host, home_dir