mirror of
https://github.com/gravitational/teleport.git
synced 2026-11-02 14:59:53 +08:00
Recently we added a way to add labels on newly added nodes based on the token. https://github.com/gravitational/teleport/pull/15114 Each token now has a list of SuggestedLabels, which are used to feed that list. However, if that list is empty, the generated script would trigger the following error when running the `teleport node configure ...` command: `teleport: error: unexpected` This happens because the command is generating an empty argument `""` when running the `teleport node configure ...` command. So it looks like this: ```bash ${TELEPORT_BINARY_DIR}/teleport node configure \ --token token \ joinmethod \ --ca-pin pin \ --auth-server host:port \ "" \ --output someport ``` That empty argument breaks things. So, in order to fix it, we are going to change the default value when no labels are provided. Instead of an empty string, we'll use an empty array. Demo (teleport node configure message removed for brev No label ```bash $ LABELS_FLAG=(); f=$(mktemp -d)/node.yaml; teleport node configure --auth-server w:1 "${LABELS_FLAG[@]}" --output $f && yq .s sh_service.labels $f enabled: "yes" commands: - name: hostname command: [hostname] period: 1m0s ``` Single label ```bash $ LABELS_FLAG=(--labels x=y); f=$(mktemp -d)/node.yaml; teleport node configure --auth-server w:1 "${LABELS_FLAG[@]}" --output $f && yq .ssh_service $f enabled: "yes" labels: x: "y" commands: - name: hostname command: [hostname] period: 1m0s ``` Multiple labels ```bash $ LABELS_FLAG=(--labels x=y,dev=prod); f=$(mktemp -d)/node.yaml; teleport node configure --auth-server w:1 "${LABELS_FLAG[@]}" --output $f && yq .ssh_service $f enabled: "yes" labels: dev: prod x: "y" commands: - name: hostname command: [hostname] period: 1m0s ```
Automated node join script for Teleport
This is an automated node join script for Teleport, which does the following:
- checks for an existing Teleport process, data directory, config file or Teleport binaries (and provides details how to clean up if any of these are present)
- tests connectivity to the given Teleport server host and port
- using either
nc,telnetor/dev/tcpif available - if none of these are available this step is skipped
- using either
- detects OS, distribution, architecture and appropriate Teleport package format, then downloads this package to a temporary directory and installs it
tarfor tarball extraction if neededdpkgfor .deb installsdnf,yumorrpmfor .rpm installs
- generates a Teleport config to set up a node and writes it to disk
- installs and starts Teleport
- via
systemdon Linux - via
launchctlon MacOS
- via
- cleans up downloaded archives afterwards
Things it doesn't do (yet):
- validate the checksum of the downloaded Teleport artifact against the published checksum
Supported operating systems, architectures and distributions
-
Linux
- Architectures
- i386
- x86_64
- armv7l
- aarch64 (no Teleport binaries available yet)
- Any Debian-based distribution
- Debian 8+
- Ubuntu 18.04+
- uses
.debpackage
- uses
- Any CentOS-based distribution
- CentOS 6+*
- RHEL 6+*
- CentOS 6 and RHEL 6 will use the special
centos6tarball package to handle the lower glibc version.
- CentOS 6 and RHEL 6 will use the special
- Fedora 27+
- Amazon Linux 2+
- uses
.rpmpackage
- uses
- Any other distribution
- uses
.tar.gztarball package
- uses
- Architectures
-
MacOS
- Architectures
- x86_64
- aarch64 (no Teleport binaries available yet)
- MacOS 10.12+
- uses
.tar.gztarball package
- uses
- Architectures
Arguments
Required arguments:
| Flag | Description | Example value | Required |
|---|---|---|---|
-v |
Teleport version | 4.3.5 |
yes |
-h |
Hostname for the Teleport auth/proxy server | teleport.example.com |
yes |
-j |
A valid node join token | ool7ahpo4thohmeuS1gieY7laiwae7oo |
yes |
-c |
The CA pin hash of the cluster being joined | sha256:6abdd3a143a230fd31c9706d668bba3ee25a6e0eec54fcd69680c1ec0530fe9c |
yes |
-p |
Port connect to on the Teleport auth/proxy server | 3080 |
no |
If any of these arguments is not provided via CLI flags, they will be requested interactively at runtime.
Optional extra flags:
| Flag | Description | Example value | Required |
|---|---|---|---|
-q |
Enable quiet mode | n/a | no |
-l |
Write logs to file | /var/log/teleport-node-installer.log |
no |
Example usage
$ bash ./install.sh \
-j ool7ahpo4thohmeuS1gieY7laiwae7oo \
-c sha256:6abdd3a143a230fd31c9706d668bba3ee25a6e0eec54fcd69680c1ec0530fe9c \
-h teleport.example.com \
-p 3080 \
-v 4.3.5