Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/gravitational/teleport/llms.txt

Use this file to discover all available pages before exploring further.

A Teleport cluster requires at minimum the Auth Service and the Proxy Service. For small deployments, you can run both services from a single teleport process on one Linux machine. For high-availability production deployments, you can run them as separate, horizontally-scaled pods on Kubernetes. This guide walks through both approaches.

Linux deployment

The Linux path is the fastest way to get a self-hosted Teleport cluster running. A single virtual machine (2 vCPUs, 4 GB RAM) is sufficient to get started.
1

Install Teleport

Teleport provides signed packages for Debian/Ubuntu (apt) and RHEL/CentOS (yum), as well as a tarball for other distributions.
# Debian / Ubuntu
curl https://goteleport.com/static/install.sh | bash -s 17 oss

# RHEL / CentOS / Amazon Linux 2
curl https://goteleport.com/static/install.sh | bash -s 17 oss

# Verify the installation
teleport version
Replace oss with enterprise if you have a Teleport Enterprise license. The installation script automatically detects your package manager (apt, yum, or zypper) and configures the Teleport package repository.
2

Write a minimal teleport.yaml

Create /etc/teleport.yaml with the configuration below. Replace teleport.example.com with the public DNS name or IP address of your server.
# /etc/teleport.yaml
version: v3

teleport:
  nodename: teleport.example.com
  data_dir: /var/lib/teleport
  log:
    output: stderr
    severity: INFO
  # Store state locally (SQLite). Switch to DynamoDB/etcd for HA.
  storage:
    type: sqlite

auth_service:
  enabled: true
  cluster_name: teleport.example.com

proxy_service:
  enabled: true
  public_addr: teleport.example.com:443
  # Automatically obtain a TLS certificate from Let's Encrypt
  acme:
    enabled: true
    email: admin@example.com

ssh_service:
  enabled: true
  labels:
    env: production
TLS and ACME: When acme.enabled is true, the Proxy Service uses Let’s Encrypt to obtain and auto-renew a certificate for your public_addr. Port 443 must be reachable from the internet for the ACME HTTP-01 challenge to succeed. If you provide your own certificate, set https_keypairs instead.
3

Create the systemd service and start Teleport

The Teleport package installs a systemd unit file automatically. Enable and start it:
sudo systemctl enable teleport
sudo systemctl start teleport

# Confirm the service is running
sudo systemctl status teleport
Check the logs for any errors:
sudo journalctl -u teleport -f
You should see log lines confirming that the Auth Service and Proxy Service have started and that certificates have been obtained.
4

Create an admin user

Use tctl (the Teleport admin CLI) to create the first local user. The command prints a one-time invite URL:
sudo tctl users add admin --roles=editor,access --logins=root,ubuntu
Open the printed URL in your browser to set a password and enroll an MFA device.
tctl must be run on the same host as the Auth Service, or with a valid admin certificate from a remote machine.
5

Log in and verify

Install tsh (the Teleport client) on your workstation:
curl https://goteleport.com/static/install.sh | bash -s 17 oss
Then log in:
tsh login --proxy=teleport.example.com --user=admin
Verify that the cluster is healthy:
tsh status
tctl status
You should see your cluster name, version, and CA fingerprints.

Minimal Production teleport.yaml

The following is a more complete teleport.yaml suitable for a self-hosted production deployment. It uses DynamoDB for cluster state and S3 for session recordings.
version: v3

teleport:
  nodename: teleport.example.com
  data_dir: /var/lib/teleport
  log:
    output: stderr
    severity: INFO
    format:
      output: json

  # High-availability DynamoDB backend
  storage:
    type: dynamodb
    region: us-east-1
    table_name: teleport-cluster-state
    audit_table_name: teleport-audit-events
    audit_sessions_uri: s3://my-teleport-recordings?region=us-east-1

auth_service:
  enabled: true
  cluster_name: teleport.example.com
  listen_addr: 0.0.0.0:3025

  # Authentication policy
  authentication:
    type: local
    second_factor: otp        # "on", "otp", "webauthn", or "off"
    webauthn:
      rp_id: teleport.example.com

  # Session recording (node-sync is most secure)
  session_recording: node-sync

proxy_service:
  enabled: true
  public_addr: teleport.example.com:443
  listen_addr: 0.0.0.0:443

  # Bring your own TLS certificate
  https_keypairs:
    - key_file: /var/lib/teleport/certs/proxy.key
      cert_file: /var/lib/teleport/certs/proxy.crt

  # Enable TLS routing to multiplex all protocols on port 443
  tunnel_listen_addr: 0.0.0.0:443

ssh_service:
  enabled: false  # run SSH service only on agent nodes, not control-plane

Systemd Service Configuration

The Teleport package installs the following systemd unit at /lib/systemd/system/teleport.service. Review it to customize resource limits or add environment files:
[Unit]
Description=Teleport SSH Service
After=network.target

[Service]
Type=simple
Restart=on-failure
ExecStart=/usr/local/bin/teleport start --config=/etc/teleport.yaml --pid-file=/run/teleport.pid
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/teleport.pid
LimitNOFILE=524288

[Install]
WantedBy=multi-user.target
To apply configuration changes without a full restart, send SIGHUP:
sudo systemctl reload teleport

Next Steps

Configuration Reference

Complete annotated reference for every teleport.yaml option.

Helm Charts

Deep-dive into teleport-cluster and teleport-kube-agent Helm values.

Enroll Servers

Add Linux servers to your new cluster with the SSH Service.

Upgrading

How to safely upgrade your cluster and agents.

Build docs developers (and LLMs) love