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 :
| Etape | Requete a l’amont | replaced |
|---|---|---|
| 1 | SSH_FXP_RENAME du fichier en cours sur la destination ; reussi si elle est libre | no |
| 2 | destination prise : posix-rename@openssh.com, atomique, sur un second canal SFTP ouvert au premier ecrasement | yes |
| 3 | sans cette extension ni second canal : suppression de la destination, puis renommage | yes |
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
| Cle | Sur un proxy SFTP |
|---|---|
home_dir (montage) | un chemin absolu sur l’amont |
create_home (montage) | sans effet : home_dir existe sur l’amont |
hidden_stores | un fichier en cours de transfert sur l’amont, publie par renommage |
stale_partials | le 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_reservation | un fichier verrou chez l’amont, a cote de la destination ; true par defaut, Windows compris |
lock_prefix | le nom de ces verrous ; un autre prefixe, sans point en tete, convient a un amont qui refuse le nom par defaut |
case_insensitive | false 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
READen 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 :
statsuit un lien, un listage ne marque aucune entree comme lien.
Ce que vous verrez
| Quand | Ligne |
|---|---|
| ouverture d’une session | INFO SFTP proxy: connecting, champs host, port |
| cle d’hote verifiee | INFO SFTP proxy: host key verified, champs upstream, fingerprint |
| session prete | INFO SFTP proxy: connected and ready, champs host, home_dir |