# Hôtes et connexions

## L'éditeur d'hôtes

Appuyez sur **⌘N** pour un nouvel hôte, ou touchez un hôte existant pour le
modifier. L'éditeur comporte quatre onglets — **connexion**, **avancé**,
**redirection**, **extraits** — et une barre **se connecter**. Sur iPhone, ces
quatre mêmes sections apparaissent sous forme de pastilles — **connexion**,
**avancé**, **tunnels**, **extraits** — où les champs de connexion et les règles
de tunnel sont mis en attente jusqu'à ce que vous touchiez enregistrer (les
autres modifications s'appliquent immédiatement, comme sur iPad) ; l'éditeur est
identique sur les deux appareils.

L'onglet connexion contient l'essentiel : **nom**, **adresse**, **port**
(1–65535), **utilisateur**, **identité** (une clé de votre page
[clés](https://bambouville.com/docs/fr/keys/)) et **mot de passe**. Un mot de passe saisi ici a la portée de
la session : il n'est conservé que pour la session en cours et jamais
enregistré. Seule exception : un hôte configuré via la
[configuration à proximité](https://bambouville.com/docs/fr/nearby-setup/) ou la
[continuité](https://bambouville.com/docs/fr/continuity/) qui s'authentifie par mot de passe — le mot de
passe saisi une fois sur le nouvel appareil est conservé comme identifiant
enregistré dans le trousseau de cet appareil, jamais synchronisé, et l'éditeur
peut le modifier plus tard (l'enregistrement remplace le mot de passe stocké).

![L'éditeur d'hôtes avec ses quatre onglets — connexion, avancé, redirection, extraits — les champs de connexion et la barre se connecter.](https://bambouville.com/docs/assets/img/host-editor.png)

*Quatre onglets en haut, et une barre se connecter épinglée en bas de chaque onglet.*


## Transport : SSH ou Mosh

Chaque hôte choisit un transport :

- **ssh** — une seule connexion SSH ; les onglets tmux restent sur la session
  principale.
- **mosh** — un terminal mosh sur UDP. Mosh garde votre session en vie lors des
  bascules Wi-Fi ↔ cellulaire et des veilles/réveils, et paraît plus vif sur
  les liaisons avec pertes. Il exige `mosh-server` installé sur l'hôte. Les
  onglets tmux passent par un second canal SSH secondaire. La
  [page mosh](https://bambouville.com/docs/fr/mosh/) raconte tout, y compris le véritable historique.

Le trafic UDP de mosh ne peut pas traverser les bastions : si vous utilisez
mosh à travers un [hôte de rebond](#hôtes-de-rebond) et que le serveur mosh est
injoignable, Tessera vous le dit (« mosh est injoignable via la chaîne de
rebonds… ») et se reconnecte en SSH.

## Modes de lancement

- **tmux automatique** — s'attache à (ou crée) une session tmux propre à
  l'hôte, avec un nom déterministe `tessera-XXXXXXXX` mémorisé d'une
  réinstallation de l'app à l'autre. C'est le mode par défaut, celui qui rend
  les coupures de connexion inoffensives.
- **tmux nommé** — s'attache à un nom de session tmux que vous choisissez ; les
  noms comportant des caractères invalides retombent sur le nom dérivé
  automatiquement.
- **personnalisé** — une commande de lancement littérale. En ssh, elle est
  envoyée au shell de connexion ; en mosh, elle est exécutée par
  `mosh-server new -- <command>`.

Voir [tmux](https://bambouville.com/docs/fr/tmux/) pour ce qu'apportent les modes tmux, et
[redirection de ports](https://bambouville.com/docs/fr/port-forwarding/#mosh-et-redirection) pour
l'interaction entre le mode de lancement et les tunnels.

## Hôtes de rebond

N'importe quel hôte enregistré peut servir de bastion SSH (ProxyJump) :
choisissez-le dans l'éditeur d'hôtes. Les chaînes s'imbriquent — l'hôte de
rebond de l'hôte de rebond prolonge la chaîne — et l'éditeur affiche le chemin
obtenu (« a → b → hôte »), avec des avertissements pour les chaînes rompues.

- Chaque saut s'authentifie indépendamment avec sa propre identité ou son
  propre mot de passe. Les sauts par mot de passe reçoivent un champ
  **mot de passe · \<nom du saut\>** dans la section hôte de rebond de
  l'éditeur, conservé uniquement pour la session en cours ; se connecter reste
  désactivé tant que chaque saut n'en a pas un.
- Les demandes de clé d'hôte apparaissent saut par saut, le bastion d'abord,
  chacune nommant le point de terminaison vérifié.
- Une chaîne rompue échoue sans repli : si un hôte de rebond a été supprimé,
  l'hôte qui en dépend l'indique dans son éditeur et la connexion échoue plutôt
  que de passer silencieusement en direct. Les erreurs nomment le saut d'où
  elles viennent (« hôte de rebond \<nom\> : … »).
- Dans la [version gratuite](https://bambouville.com/docs/fr/unlimited-hosts/), un bastion enregistré
  séparément occupe son propre emplacement d'hôte enregistré.

## Onglet avancé

- **logo de l'OS** — détecté automatiquement à la connexion, ou défini à la
  main (macos, ubuntu, debian, alpine, linux, raspbian).
- **étiquettes** et **notes** — pour votre propre organisation.
- **variables d'environnement** — un `KEY=value` par ligne ; un `export `
  initial facultatif est retiré. Les valeurs sont transmises telles quelles au
  shell distant — `$HOME`, `$(…)` et les guillemets fonctionnent tels
  qu'écrits.
- **arrière-plan du terminal** — un remplacement par hôte de
  l'[arrière-plan](https://bambouville.com/docs/fr/appearance/) global.

> Les variables d'environnement et les extraits de démarrage ne s'exécutent
> qu'au démarrage de la session tmux. Si vous les modifiez pour un hôte dont la
> session tmux existe déjà, fermez cette session sur le serveur pour prendre en
> compte les changements.

## Extraits

L'onglet extraits contient un **extrait de démarrage** : des commandes envoyées
immédiatement après la connexion (la même réserve tmux ci-dessus s'applique).

## Quand une connexion s'enlise

Pendant qu'une session s'établit, la surcouche de lancement nomme l'étape en
cours — **connexion**, puis pour les hôtes tmux **démarrage de tmux** (SSH) ou
**attachement de tmux** (mosh), puis **attachement du volet**. Si une étape
n'avance plus pendant une douzaine de secondes, la surcouche indique laquelle
bloque (« toujours connexion — le handshake n'est pas terminé. ») et propose
une sortie plutôt que de tourner dans le vide :

- **modifier l'hôte** — ouvre l'éditeur d'hôtes, quand le problème vient de
  l'adresse, du port ou de la clé,
- **réessayer** — démonte la tentative et reconnecte de zéro,
- **retour** — abandonne et revient à vos hôtes. Sortir d'une tentative
  enlisée la déconnecte entièrement — rien ne reste en cours d'exécution sur le
  serveur.

Le minuteur vaut par étape : une connexion lente mais qui progresse ne le
déclenche jamais. Si tmux lui-même ne peut pas démarrer — il n'est pas
installé, la session ne peut pas s'ouvrir, ou les dotfiles de l'hôte lancent
déjà tmux à la connexion — Tessera vous dépose dans un shell simple avec une
bannière disant exactement ce qui s'est passé, plutôt que d'attendre un tmux
qui ne répondra jamais.

![La surcouche de lancement enlisée pendant la connexion : la légende d'étape indique connexion avec le nom de la session tmux en dessous, une ligne d'avertissement indique toujours connexion — le handshake n'est pas terminé., et les boutons modifier l'hôte, réessayer et retour attendent en dessous.](https://bambouville.com/docs/assets/img/stall-notice.png)

*Douze secondes sans progression : la surcouche nomme l'étape en cours et propose une sortie.*

## Sessions

Tessera garde ouvertes plusieurs sessions simultanées vers n'importe quels
hôtes. Les hôtes en tmux automatique sont uniques — une session de contrôle
tmux par hôte (par hôte et par nom de session pour tmux nommé) — tandis que les
hôtes à commande personnalisée peuvent en avoir plusieurs (« nom #2 »,
« nom #3 »). La section **actif** de la barre latérale liste toutes les
sessions, étiquetées « nom (tmux) », « nom (tmux : nom-de-session) » ou
« nom #N », chacune avec un bouton de déconnexion. Sur iPhone, cette même liste
est l'onglet **sessions**.

Passez d'une session à l'autre en les touchant, en parcourant les voisines avec
**⌘⇧K** / **⌘⇧J**, ou en ouvrant la palette de bascule rapide **⌘K** :
saisissez du texte pour filtrer les sessions (les plus récentes d'abord) et les
agents — préfixez la requête par `@` pour la limiter aux agents.

## Restauration de session

**réglages → terminal → démarrage → connexions précédentes** contrôle ce qui se
passe à un nouveau lancement :

- **demander** — affiche une feuille « rouvrir les connexions précédentes »
  avec « toujours rouvrir » / « rouvrir » / « pas maintenant ».
- **toujours** — reconnecte sans rien demander.
- **jamais** — démarre à vide.

Sur iPhone, la feuille de choix est remplacée par un simple interrupteur
**restaurer au lancement**. Seules les sessions d'hôtes enregistrés dont le
matériel de clé est intact sont restaurables.

Le retour au premier plan fonctionne de la même façon, en plus fin : Tessera
attend que **toutes** les sessions ouvertes signalent leur état avant de
décider quoi reconnecter, de sorte que si plusieurs hôtes tombent en même
temps — ou qu'une session mosh n'admet que tardivement sa mort — chacune est
reconnectée, aucune laissée en plan. Pendant ce temps, la surcouche de
lancement compte les autres (« +2 autres sessions en reconnexion »).
Tessera est délibérément monofenêtre (pas de multi-scène sur iPad) ; la barre
latérale et la palette — la barre d'onglets et le sélecteur sur
[iPhone](https://bambouville.com/docs/fr/iphone/) — sont vos moyens de déplacement.
