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

Porte SFTP et algorithmes SSH

Un exemple

[sftp]
listen = "0.0.0.0:2222"
host_keys = ["/etc/craft-file-gate/host_ed25519"]

[server]
max_sessions_per_user = 10

[sftp] est optionnelle : sans elle, la porte SFTP est eteinte.

La cle d’hote se cree une fois, avant le premier demarrage :

ssh-keygen -t ed25519 -f /etc/craft-file-gate/host_ed25519 -N ""

Les cles de [sftp]

Toutes les cles : Reference [sftp] ; les delais : Delais.

[sftp.ban], [sftp.rate_limit] : Bans. Dans [server], communes a toutes les portes : max_sessions_per_user (sessions simultanees d’un meme nom, de toutes les instances avec [cluster]), shutdown_grace_period_secs (Arret), [server.hidden_stores] (Uploads).

La porte annonce les methodes password et publickey. Elle sert le seul sous-systeme sftp, une fois par connexion : ni shell, ni exec, ni renvoi de port.

Cles d’hote

TypeFormat
ed25519, ECDSA (P-256, P-384, P-521), RSAOpenSSH (ssh-keygen) ou PEM (ssh-keygen -m PEM, PKCS#8)

Chaque cle chargee est annoncee avec son empreinte SHA256:..., celle que donne ssh-keygen -l et que voit un client a sa premiere connexion. GET /admin/config et l’onglet Configuration de la console donnent les memes.

generate_host_key cree la cle seulement si son fichier est absent, en 0600, et donne son empreinte. Un fichier present est relu tel quel : la cle ne change pas d’un demarrage a l’autre. Reservez-le a une instance unique sur un stockage persistant ; en Kubernetes, montez un Secret (voir Secrets).

Une entree en table choisit les algorithmes qu’une cle annonce, avec la syntaxe de [sftp.algorithms] appliquee a la liste host_key :

[sftp]
listen = "0.0.0.0:2222"
host_keys = [
  "/etc/craft-file-gate/host_ed25519",
  { path = "/etc/craft-file-gate/host_rsa", algorithms = ["rsa-sha2-512", "rsa-sha2-256"] },
]

Un algorithme n’est annonce que si une cle chargee sait le signer.

Algorithmes

[sftp.algorithms] regle les algorithmes proposes, par categorie. Chaque liste part d’un defaut moderne et s’edite comme dans OpenSSH :

EcritureEffet
["+nom"]ajoute nom a la fin du defaut
["-nom"]retire nom du defaut
["a", "b"]remplace le defaut par cette liste

Les defauts, liste par liste : Reference [sftp.algorithms].

  • kex, ciphers, macs et host_key se negocient avant que l’utilisateur soit connu : ils valent pour tout le serveur.
  • user_key dit les algorithmes avec lesquels une cle d’utilisateur peut signer sa connexion (le PubkeyAcceptedAlgorithms d’OpenSSH). Un role peut en permettre d’autres a ses seuls utilisateurs (user_key_algorithms, voir Authentification).
  • Les marqueurs ext-info-* et kex-strict-* sont toujours ajoutes a kex.
  • L’extension server-sig-algs annonce au client la liste host_key en vigueur, puis les algorithmes de user_key qu’aucune cle d’hote ne signe.

Les algorithmes faibles

diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group-exchange-sha1, aes*-cbc, hmac-sha1, hmac-sha1-etm@openssh.com et ssh-rsa (RSA signe en SHA-1) ne sont dans aucun defaut. Ajoutes avec +, ils sont proposes. diffie-hellman-group-exchange-sha256 s’ajoute aussi, hors defaut.

Un vieux client

# Un client JSch ancien : ni curve25519 ni ML-KEM
[sftp.algorithms]
kex = ["+diffie-hellman-group14-sha1"]
Le client ne connait pasAjouter
curve25519, ML-KEMkex = ["+diffie-hellman-group14-sha1"]
ssh-ed25519 en cle d’hoteune cle d’hote ECDSA P-256 a host_keys (ssh-keygen -t ecdsa -b 256 -f host_ecdsa -N ""), plutot qu’une RSA en ssh-rsa
rsa-sha2-* pour sa cle d’utilisateuruser_key_algorithms = ["ssh-rsa"] sur son role seulement

La liste des sessions de la console montre, pour chaque session, les algorithmes negocies et ceux qui sont faibles (weak_algorithms).

Ce que vous verrez

QuandLigne
demarrage, chaque cle d’hoteINFO loaded host key, champs path, key_type, fingerprint
demarrageINFO SSH algorithms offered, champs kex, ciphers, macs, host_key, user_key
connexion accepteeINFO new SSH connection
session ouverteINFO session established and registered, champs session_id, auth_method, signature_algorithm, total_sessions
fin ordinaire d’une connexionINFO SSH session ended: <raison>, champs peer, username, client_version