Passer au contenu principal

GoTeleport

GoTeleport - Intégration d'une ressource Linux

📋 Pré-requis

Pour réaliser les étapes de ce guide, vérifiez que votre environnement répond aux exigences suivantes :

💡
Les mises à jours majeures sont supportées pendant un an. Il y a 3 versions majeures par an en moyenne.
  • Disposer des clients tctl et de l'outil client tsh connecté au cluster Teleport.
  • Disposer d'un hôte Linux compatible à intégrer

🔐 Vérifier vos accès au cluster Teleport

Connectez-vous à votre cluster Teleport avec la commande suivante :

tsh login --proxy=votreclusterteleport.example.com --user=votreuserid

Exemple avec un compte local

Si vous souhaitez vous connecter depuis un référentiel externe comme keycloak :

tsh login --proxy=teleport.example.com:443 --user=user@example.com --auth=keycloak-connector

Votre compte doit disposer des permissions suffisantes pour générer le token dont nous aurons besoin pour intégrer la machine à Teleport. Vous devrez donc pouvoir créer un token ainsi que des ressources de type node .

Plus de détails sur ce lien :

Access Controls Reference | Teleport
Explains the configuration settings that you can include in a Teleport role, which enables you to apply access controls for your infrastructure.

tsh login --proxy=teleport.example.com --user=email@example.com
tctl status
Cluster teleport.example.com
Version 16.4.6
CA pin sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

Exécutez la commande tctl status pour vérifier que vous êtes bien connectés

🎫 Générer un token

Pour générer un token, la commande est la suivante :

tctl tokens add --ttl=60m --type=node

La durée de vie du token dépendra de votre cas d'usage. Si vous souhaitez automatiser l'intégration de ressources de Teleport sans avoir à renouveler régulièrement le token, vous pouvez lui donner une durée de vie plus importante.

Dans l'idéal, un token éphémère devrait être générer par un processus automatique et délivrer à la machine avant son enregistrement.

La commande devrait vous renvoyer le contenu suivant :

❯ tctl tokens add --ttl=60m --type=node
The invite token: 20d410e050f27f059bcb23b1b8a206f1
This token will expire in 60 minutes.

Run this on the new node to join the cluster:

> teleport start \
   --roles=node \
   --token=20d410e050f27f059bcb23b1b8a206f1 \
   --ca-pin=sha256:ac42bf8e06b62a3b07e1b757905b2260119bc6cee4ab3122f26612a8988dc944 \
   --auth-server=10.42.4.43:3025

Please note:

  - This invitation token will expire in 60 minutes
  - 10.42.4.43:3025 must be reachable from the new node

Vous pouvez bien entendu simplement récupérer la commande et l'exécuter sur le noeud à enregistrer, mais si votre objectif est d'automatiser le processus d'enregistrement à Teleport de vos machines, vous n'aurez besoin que du token.

tctl tokens add --ttl=60m --type=node --format json | jq -r .token

Génère un token, récupère le retour au format json et en extrait le token

💡
Dans l'idéal, vous générerez automatiquement le token dans votre pipeline de déploiement, peu importe votre outil d'IaC / Config as Code

🔧 Intégration de la ressource

📦 Déploiement des binaires

Teleport comprend un ensemble de binaire (en Go) à déployer sur la machine à intégrer. Un script automatique existe pour certains systèmes (Ubuntu par exemple), nous documenterons plutôt ici le déploiement de Teleport depuis un paquet (RPM/Deb).

La documentation inclus également plusieurs dépôts de paquets pour chaque distributions Linux (apt, yum, zypper, dnf).

Par exemple, pour Ubuntu, le repo est le suivant :

#/etc/apt/sources.list.d/teleport.list
deb [signed-by=/etc/apt/keyrings/teleport-archive-keyring.asc]             https://apt.releases.teleport.dev/ubuntu noble stable/cloud

La liste des versions supportées est disponible dans la documentation officielle.

Installing Teleport | Teleport
How to install Teleport and Teleport’s client tools on your platform, including binaries and instructions for Docker and Helm.

Vous pouvez également déployer l'agent GoTeleport depuis un paquet RPM/Deb, ou encore depuis l'archive tar.


Exemple pour un RPM

TELEPORT_PKG=teleport-ent
TELEPORT_VERSION=17.4.8
SYSTEM_ARCH="x86_64"
curl https://cdn.teleport.dev/${TELEPORT_PKG?}-${TELEPORT_VERSION?}-1.${SYSTEM_ARCH?}.rpm.sha256
curl -O https://cdn.teleport.dev/${TELEPORT_PKG?}-${TELEPORT_VERSION?}-1.${SYSTEM_ARCH?}.rpm
shasum --check -a 256 https://cdn.teleport.dev/${TELEPORT_PKG?}-${TELEPORT_VERSION?}-1.${SYSTEM_ARCH?}.rpm
sudo rpm -i https://cdn.teleport.dev/${TELEPORT_PKG?}-${TELEPORT_VERSION?}-1.${SYSTEM_ARCH?}.rpm

La mise à jour de l'agent peut être automatisée avec Teleport Update (que nous couvrirons dans un autre article), pour l'intégrer :

sudo teleport-update enable --proxy example.teleport.sh # enable Managed Updates

Le paquet déploiera Teleport mais ne générera pas de fichier de configuration

rpm -ql teleport-ent-17.4.8-1.x86_64

/opt/teleport/system/bin/fdpass-teleport
/opt/teleport/system/bin/tbot
/opt/teleport/system/bin/tctl
/opt/teleport/system/bin/teleport
/opt/teleport/system/bin/teleport-update
/opt/teleport/system/bin/tsh
/opt/teleport/system/lib/systemd/system/teleport.service
/var/lib/teleport
/var/lib/teleport/versions

Exemple sur une base SUSE, avec la paquet Enterprise. Le résultat est assez similaire dans la version communautaire.

⚙️ Configuration

Depuis le serveur à intégrer, vous pouvez générer une configuration type avec la commande teleport configure

Par exemple

teleport configure --proxy  teleport.example.com --node-name yournode --token 20d410...1b8a206f1  --roles node

Cela vous générera un template de configuration que vous pourrez modifier et réutiliser à votre guise pour vos intégrations futures

version: v3
teleport:
  nodename: yournode
  data_dir: /var/lib/teleport
  join_params:
    token_name: 20d410e05....23b1b8a206f1
    method: token
  proxy_server: teleport.example.com:443
  log:
    output: stderr
    severity: INFO
    format:
      output: text
  ca_pin: ""
  diag_addr: ""
auth_service:
  enabled: "no"
ssh_service:
  enabled: "yes"
proxy_service:
  enabled: "no"
  https_keypairs: []
  https_keypairs_reload_interval: 0s
  acme: {}

C'est également dans ce fichier que vous pourrez intégrer des labels dans la section SSH.

Ce fichier de configuration est utilisé par tous les services Teleport (serveur ou client), il se trouvera par défaut dans /etc/teleport.yaml .

Pour les autres options :

Teleport Configuration | Teleport
The detailed guide and reference documentation for configuring Teleport for SSH and Kubernetes access.

Ajouter l'option -o /etc/teleport.yaml pour écrire le fichier de configuration sur le serveur.

teleport configure --proxy teleport.example.com --node-name yournode --token 20d410...1b8a206f1 --roles node -o /etc/teleport.yaml

Si vous avez utilisez un paquet pour déployer Teleport, le service est déjà présent. Pour l'archive il vous faudra copier le fichier teleport.service dans le bon répertoire, généralement /etc/systemd/system .

yourserver:~ # grep "ExecStart" /lib/systemd/system/teleport.service
ExecStart=/usr/local/bin/teleport start --config /etc/teleport.yaml --pid-file=/run/teleport.pid

Si vous avez utilisé un package manager, le service devrait déjà être déployer et visible dans /lib/systemd/system/teleport.service .

🚀 Lancer le service

systemctl start teleport

Vous pouvez ensuite observer le démarrage avec la commande suivante

journalctl -u teleport -f

Si tout se passe bien, les logs indiqueront

Jun 06 11:50:01 openbao-transit teleport[26395]: 2025-06-06T11:50:01.594+02:00 INFO [PROC:1]    The process successfully wrote the credentials and state to the disk. pid:26395.1 identity:Node service/connect.go:508
Jun 06 11:50:01 openbao-transit teleport[26395]: 2025-06-06T11:50:01.694+02:00 INFO [NODE:1:CA] Cache "node" first init succeeded. cache/cache.go:1152
Jun 06 11:50:01 openbao-transit teleport[26395]: 2025-06-06T11:50:01.696+02:00 INFO [NODE:1]    Service is starting in tunnel mode. pid:26395.1 service/service.go:3244
Jun 06 11:50:01 openbao-transit teleport[26395]: 2025-06-06T11:50:01.696+02:00 INFO [PROC:1]    The new service has started successfully. Starting syncing rotation status. pid:26395.1 max_retry_period:4m16s service/connect.go:642

Et voilà, votre serveur devrait remonter dans la console Teleport.