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
| Type | Format |
|---|---|
| ed25519, ECDSA (P-256, P-384, P-521), RSA | OpenSSH (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 :
| Ecriture | Effet |
|---|---|
["+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,macsethost_keyse negocient avant que l’utilisateur soit connu : ils valent pour tout le serveur.user_keydit les algorithmes avec lesquels une cle d’utilisateur peut signer sa connexion (lePubkeyAcceptedAlgorithmsd’OpenSSH). Un role peut en permettre d’autres a ses seuls utilisateurs (user_key_algorithms, voir Authentification).- Les marqueurs
ext-info-*etkex-strict-*sont toujours ajoutes akex. - L’extension
server-sig-algsannonce au client la listehost_keyen vigueur, puis les algorithmes deuser_keyqu’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 pas | Ajouter |
|---|---|
| curve25519, ML-KEM | kex = ["+diffie-hellman-group14-sha1"] |
ssh-ed25519 en cle d’hote | une 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’utilisateur | user_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
| Quand | Ligne |
|---|---|
| demarrage, chaque cle d’hote | INFO loaded host key, champs path, key_type, fingerprint |
| demarrage | INFO SSH algorithms offered, champs kex, ciphers, macs, host_key, user_key |
| connexion acceptee | INFO new SSH connection |
| session ouverte | INFO session established and registered, champs session_id, auth_method, signature_algorithm, total_sessions |
| fin ordinaire d’une connexion | INFO SSH session ended: <raison>, champs peer, username, client_version |