Accès SSH

Accès SSH au GPU

Tout l’accès au serveur d’inférence passe par un tunnel SSH. Le serveur vLLM écoute sur 127.0.0.1 (la boucle locale de la machine) et n’est jamais exposé sur Internet ; vous « rapatriez » son port sur votre poste à travers un tunnel chiffré. Cette page détaille l’onglet Accès.

1. Générer votre paire de clés (sur votre poste)

Une clé SSH est une paire : une partie privée (qui reste chez vous) et une partie publique (que vous partagez). Générez-la ainsi :

ssh-keygen -t ed25519 -f ~/.ssh/gpu_masociete -C "gpu-masociete"
  • -t ed25519 : algorithme moderne, court et robuste.
  • -f ~/.ssh/gpu_masociete : chemin des fichiers créés (remplacez masociete par le nom de votre société).
  • -C "gpu-masociete" : un commentaire libre pour repérer la clé.

Deux fichiers en résultent :

FichierRôleÀ faire
~/.ssh/gpu_masocieteClé privéeNe jamais partager, ne jamais coller.
~/.ssh/gpu_masociete.pubClé publiqueÀ coller dans la console (étape 2).
Avertissement

La clé privée ne quitte jamais votre poste. Ne la collez nulle part, ne l’envoyez à personne. La console ne vous demande que la clé publique (le fichier .pub) — ou le nom d’une clé existante.

Affichez la clé publique pour la copier :

cat ~/.ssh/gpu_masociete.pub

2. Déclarer une ligne d’accès (onglet Accès → Configuration de l’accès)

Chaque ligne décrit un accès autorisé. Renseignez :

  • Libellé — un nom lisible (ex. poste de Nadia). En le saisissant, le champ Nom clé SSH (fichier) se remplit automatiquement ; il reste modifiable si vous voulez réutiliser une clé existante.
  • Nom clé SSH (fichier) — le nom sous lequel la clé sera enregistrée. Auto-généré à partir du libellé, éditable.
  • Clé publique SSH (à coller) — collez ici le contenu du fichier .pub.
  • IP autorisée (/32) — l’adresse IP publique du poste qui se connectera (ex. 203.0.113.7/32). Le pare-feu de la machine n’ouvrira le port 22 qu’à ces adresses.

Cliquez Enregistrer. Ajoutez d’autres lignes avec + ajouter une ligne.

Astuce

Une ligne par poste ou par personne. Ce n’est pas obligatoire techniquement, mais c’est la bonne pratique de gestion : vous voyez d’un coup d’oeil qui a accès et depuis où, et vous pouvez retirer un accès précis sans toucher aux autres.

Information

IP et clé d’une même ligne ne sont pas liées entre elles. Sous le capot, toutes les clés autorisées et toutes les IP autorisées forment deux ensembles indépendants : n’importe quelle clé déclarée peut se connecter depuis n’importe quelle IP déclarée. Le regroupement par ligne sert votre lisibilité, pas une règle de corrélation.

3. Quand la clé et l’IP prennent effet

Vos clés et IP sont installées sur la machine au moment de la commande, lors du tout premier démarrage de l’incarnation (via l’initialisation au boot). La clé publique que vous avez collée est alors installée automatiquement sur la machine (compte ubuntu) ; l’IP /32 ouvre le port 22 dans le pare-feu.

Avertissement

Timing à retenir. Définissez vos accès AVANT de commander. Ajouter une clé ou une IP sur une incarnation déjà en marche n’a pas d’effet immédiat : il faut Libérer puis re-Commander pour que le nouvel accès soit appliqué au prochain démarrage. Regroupez donc tous vos accès avant la première commande.

Information

Formulaire verrouillé quand une machine existe. Tant qu’une incarnation est commandée, l’onglet Accès grise les champs (🔒 « Accès verrouillé ») : les éditer ne changerait rien côté serveur. Pour modifier un accès, Libérez l’incarnation (onglet Actions) puis re-Commandez.

4. Se connecter : accès shell et tunnel

Une fois la machine En marche, l’onglet Accès affiche deux commandes prêtes à copier, avec votre clé -i déjà renseignée. Remplacez -i ~/.ssh/gpu_masociete par le chemin de votre clé privée si vous l’avez nommée autrement.

Accès shell (administration, installation de modèles) :

ssh -i ~/.ssh/gpu_masociete ubuntu@<IP-publique-de-la-machine>

Accès à l’API GPU pour votre application (inférence) — ouvrez le tunnel :

ssh -i ~/.ssh/gpu_masociete -L 8000:127.0.0.1:8000 ubuntu@<IP-publique-de-la-machine>
  • -L 8000:127.0.0.1:8000 : rapatrie le port 8000 de la machine (où écoute vLLM) sur le port 8000 de votre poste.
  • ubuntu@<IP> : le compte de connexion et l’adresse publique de la machine.

Laissez le terminal du tunnel ouvert : il vit tant que la commande tourne. Ajoutez -N pour un tunnel seul (sans shell distant) :

ssh -i ~/.ssh/gpu_masociete -N -L 8000:127.0.0.1:8000 ubuntu@<IP-publique-de-la-machine>

5. Interroger le modèle

Le tunnel ouvert, le serveur d’inférence est joignable en local sur http://localhost:8000/v1 — l’API est compatible OpenAI :

curl http://localhost:8000/v1/models
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="sk-local")
resp = client.chat.completions.create(
    model="le-modèle-servi",
    messages=[{"role": "user", "content": "Bonjour !"}],
)
print(resp.choices[0].message.content)

La clé d’API locale (api_key) n’a pas d’importance ici : la sécurité vient du tunnel SSH et du pare-feu, pas d’un jeton applicatif.

Dépannage rapide

SymptômePiste
Connection timed out à l’ouverture du tunnelVotre IP publique a-t-elle changé ? Vérifiez qu’elle figure bien dans une ligne d’accès.
Permission denied (publickey)La clé privée utilisée correspond-elle à la publique déclarée ? Précisez-la avec -i.
L’onglet Accès n’affiche pas de commande de tunnelPas d’IP publique : la machine n’est pas encore commandée ou pas encore En marche.
Nouvelle clé/IP sans effetElles s’appliquent au premier démarrage : Libérer puis re-Commander (voir §3).