Teleport reads its configuration from a YAML file, typically located atDocumentation 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.
/etc/teleport.yaml. This file controls which services the process runs, how they communicate, and where state is stored. Every setting that can appear in teleport.yaml can also be overridden by an environment variable of the form TELEPORT_<SECTION>_<KEY> — for example, the auth service’s listen address becomes TELEPORT_AUTH_SERVICE_LISTEN_ADDR.
When you run multiple services on the same machine (the most common production pattern), each service section is enabled under the same configuration file and Teleport starts them all in a single process.
After editing
teleport.yaml, restart the teleport service (sudo systemctl restart teleport) for changes to take effect.Top-level structure
teleport section
The teleport block configures node-wide identity and storage.
teleport — global settings
teleport — global settings
| Field | Type | Default | Description |
|---|---|---|---|
nodename | string | system hostname | Unique name for this Teleport instance in the cluster. |
data_dir | string | /var/lib/teleport | Directory for persistent state, certificates, and SQLite cache. |
pid_file | string | (none) | Path to write the process PID file. |
advertise_ip | string | (auto-detected) | Public IP address announced to other cluster members. |
auth_token | string | (none) | Static token used to join a cluster (prefer join_params). |
join_params.token_name | string | (none) | Name of a provisioning token for joining. |
join_params.method | string | token | Join method: token, iam, ec2, github, gcp, azure, kubernetes. |
log.output | string | stderr | Log destination: stderr, stdout, or a file path. |
log.severity | string | INFO | Log level: DEBUG, INFO, WARN, ERROR. |
log.format.output | string | text | Log format: text or json. |
ca_pin | string | (none) | SHA-256 fingerprint of the cluster CA, used for first-time join. |
diag_addr | string | (none) | Address for the /healthz and /readyz diagnostic endpoints. |
auth_service section
The Auth Service is the cluster certificate authority and the single source of truth for all access decisions.
auth_service — authentication and certificate authority
auth_service — authentication and certificate authority
proxy_service section
The Proxy Service is the public-facing gateway that routes traffic to the Auth Service, SSH nodes, Kubernetes clusters, databases, and applications.
proxy_service — public gateway
proxy_service — public gateway
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable the Proxy Service. |
listen_addr | string | 0.0.0.0:3023 | Address for SSH proxy connections. |
web_listen_addr | string | 0.0.0.0:3080 | Address for the Web UI and HTTPS API. |
tunnel_listen_addr | string | 0.0.0.0:3024 | Reverse tunnel listener for agents. |
public_addr | string | (none) | Publicly reachable address (host:port). Used in issued certificates. |
https_keypairs | list | [] | TLS certificate/key pairs for the Web UI. |
acme.enabled | bool | false | Obtain Let’s Encrypt certificates automatically. |
acme.email | string | (none) | Email for Let’s Encrypt ACME registration. |
kube_listen_addr | string | 0.0.0.0:3026 | Address for Kubernetes proxy connections. |
mysql_listen_addr | string | 0.0.0.0:3036 | Address for MySQL database proxy. |
postgres_listen_addr | string | (none) | Override address for PostgreSQL proxy (default shares web port). |
trusted_cluster_token | string | (none) | Token for connecting leaf clusters. |
ssh_service section
The SSH Service turns the node into a Teleport-managed SSH server.
ssh_service — SSH node
ssh_service — SSH node
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable the SSH Service. |
listen_addr | string | 0.0.0.0:3022 | Address for inbound SSH connections. |
labels | map | {} | Static labels applied to this node. Used for RBAC. |
commands | list | [] | Shell commands whose output becomes dynamic labels. |
permit_user_env | bool | false | Allow users to pass environment variables through SSH. |
pam.enabled | bool | false | Enable PAM integration for session creation. |
pam.service_name | string | sshd | PAM service name. |
enhanced_recording.enabled | bool | false | Enable BPF-based enhanced session recording. |
kubernetes_service section
The Kubernetes Service proxies access to Kubernetes API servers.
kubernetes_service — Kubernetes proxy
kubernetes_service — Kubernetes proxy
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable the Kubernetes Service. |
listen_addr | string | 0.0.0.0:3026 | Address to listen for Kubernetes API connections. |
kubeconfig_file | string | (in-cluster) | Path to a kubeconfig granting access to Kubernetes clusters. |
kube_cluster_name | string | (none) | Name of the in-cluster Kubernetes cluster to register. |
labels | map | {} | Labels applied to the Kubernetes cluster resource. |
resources | list | [] | Dynamic clusters discovered via label selectors. |
db_service section
The Database Service proxies connections to databases (PostgreSQL, MySQL, MongoDB, and more).
db_service — database proxy
db_service — database proxy
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable the Database Service. |
databases | list | [] | Statically enrolled databases. |
databases[*].name | string | (required) | Unique resource name of the database. |
databases[*].protocol | string | (required) | Protocol: postgres, mysql, mongodb, sqlserver, redis, etc. |
databases[*].uri | string | (required) | Connection endpoint (host:port). |
databases[*].description | string | (none) | Human-readable description. |
databases[*].labels | map | {} | Labels for RBAC matching. |
databases[*].tls.mode | string | verify-full | TLS mode: verify-full, verify-ca, insecure. |
databases[*].aws.region | string | (none) | AWS region for IAM-authenticated RDS/Aurora databases. |
app_service section
The Application Service exposes web applications and cloud provider APIs through Teleport.
app_service — web application and API proxy
app_service — web application and API proxy
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable the Application Service. |
apps | list | [] | Statically enrolled applications. |
apps[*].name | string | (required) | Unique application name (used in the URL). |
apps[*].uri | string | (required) | Internal URL of the application. |
apps[*].public_addr | string | (none) | Custom public address, otherwise <name>.<proxy_addr>. |
apps[*].description | string | (none) | Human-readable description. |
apps[*].labels | map | {} | Labels for RBAC matching. |
apps[*].insecure_skip_verify | bool | false | Skip TLS certificate verification for the upstream app. |
apps[*].rewrite.headers | list | [] | HTTP headers to inject or rewrite. |
apps[*].cloud | string | (none) | Cloud API proxy: AWS, GCP, Azure. |
windows_desktop_service section
The Windows Desktop Service provides browser-based RDP access to Windows machines.
windows_desktop_service — Windows RDP proxy
windows_desktop_service — Windows RDP proxy
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Enable the Windows Desktop Service. |
listen_addr | string | 0.0.0.0:3028 | Address for desktop proxy connections. |
ldap.addr | string | (none) | Active Directory LDAP address (host:port). |
ldap.username | string | (none) | Service account UPN for LDAP bind. |
ldap.domain | string | (none) | Active Directory domain. |
ldap.insecure_skip_verify | bool | false | Skip LDAP TLS verification (development only). |
discovery.base_dn | string | (none) | Base DN for AD computer object discovery. |
discovery.filters | list | [] | LDAP filters for computer object discovery. |
hosts | list | [] | Statically configured Windows hosts. |
hosts[*].name | string | (required) | Unique resource name. |
hosts[*].addr | string | (required) | IP or hostname of the Windows machine. |
labels | map | {} | Labels applied to all desktops registered by this service. |
Complete multi-service example
The following is a complete, workingteleport.yaml that runs the Auth Service, Proxy Service, SSH Service, and Database Service on the same host:
Environment variable overrides
Every configuration field can be overridden with an environment variable using the patternTELEPORT_<SECTION>_<FIELD> (uppercase, underscores). This is useful for secrets in containerised deployments:
