Getting Started
Quickstart
The no-installation way to try out TMS server is to run its Docker container in MVP mode and install the KeyCmd module on a host machine on which you have an account. The other option is to build and run tms_server natively on a host. Both the Docker Testing on Localhost and Native Testing on Localhost methods are discussed in subsections below. KeyCMD installation is outside the scope of this quickstart discussion.
For further information, see the Docker Server and Native Server discussions. Also see Server Configuration for information on how to configure TMS. Finally, see KeyCmd to learn how to install the KeyCmd module on a host and to KeyCmd Configuration on how to configure it.
Docker Testing on Localhost
Installation
To run TMS server in a docker container, clone the tms_server repository to your machine in an account that can issue docker commands. We will refer to the directory into which the repository is cloned as ${TMS_HOME}.
Perform the first step, Installing TMS Server (tms_server), described in the README-DOCKER file. Assuming current TMS version is 0.1.0, issue these commands:
cd ${TMS_HOME}/deployment/docker
./docker_install.sh 0.1.0
This step will create the ${HOME}/tms-docker directory. In addition, the ${HOME}/tms-docker/tms_customizations/tms-install.out file contains the administrative credentials generated for the two standard tenants, default and test.
Automatically Generated Test Data
Test data is also generated as part of installation. The following values are used to create test resources in the test tenant:
Application: testapp1
Application version: 1.0
Client: testclient1
Client password: secret1
User: testuser1
Host: testhost1
Host account: testhostaccount1
The automatically generated resources that use the above values are:
testclient1 client for testapp1:1.0 with secret1 password
testuser1 MFA record
testuser1 to testhostaccount1 identity mapping on testhost1
testuser1 to testclient1 delegation
In the creating_keys_label we implicitly depend on these resource definitions to create new key pairs.
Customization and Execution
For illustration purposes, we’ll run TMS in Minimal Viable Product (MVP) mode, which will require setting some configuration parameters. This corresponds to the Customizing the TMS Runtime section in README-DOCKER.
First, copy the default configuration file to use as a starting point:
cd ${HOME}/tms-docker/tms_customizations
cp ${TMS_HOME}/resources/config/tms.toml .
Use a text editor to edit ${HOME}/tms-docker/tms_customizations/tms.toml. Assign the following values to runtime parameters:
enable_mvp = true
enable_test_tenant = true
Save the changes and then start the server:
cd ${TMS_HOME}/deployment/docker
./docker_run.sh 0.1.0
At this point, you should see that a container named tms_server_container is running. With the server started, we can now copy the customized tms.toml file into the container’s named volume:
cd ${HOME}/tms-docker/tms_customizations
docker cp tms.toml tms_server_container:/tms-root/.tms/config/tms.toml
Depending on the version of Docker that you are running, you might see a message like this:
Successfully copied 4.61kB to tms_server_container:/tms-root/.tms/config/tms.toml
If you see an error response like “Error response from daemon: No such container: tms_server_container”, the copy failed. Assuming success, the server needs to be restarted to activate the configuration changes:
docker restart tms_server_container
Testing TMS
We begin by querying the TMS version:
curl -k https://localhost:3000/v1/tms/version
The -k parameter on curl allows self-signed certificate shipped with TMS to be accepted, which is appropriate for initial testing but not for production use. The results (with formatting) will look something like this:
{
"git_branch": "main",
"git_commit": "55e1ca0",
"git_dirty": "true",
"result_code": "0",
"result_msg": "success",
"rustc_version": "rustc 1.82.0 (f6e511eec 2024-10-15)",
"source_ts": "2024-11-27T17:36:09Z",
"tms_version": "0.1.0"
}
Creating Keys
In MVP mode, we can easily create key pairs in the test tenant using the test resources generated during installation. To create a new key pair, issue this command:
curl -k -X 'POST' 'https://localhost:3000/v1/tms/pubkeys/creds' -H 'accept: application/json; charset=utf-8' -H 'Content-Type: application/json; charset=utf-8' -d '{"client_user_id": "testuser1", "host": "testhost1", "host_account": "testhostaccount1", "num_uses": -1, "ttl_minutes": -1}' -H 'X-TMS-CLIENT-ID: testclient1' -H 'X-TMS-CLIENT-SECRET: secret1' -H 'X-TMS-TENANT: test'
The key pair is returned in the result along with other information:
{
"expires_at": "9999-12-31T23:59:59Z",
"key_bits": "256",
"key_type": "ed25519",
"max_uses": "2147483647",
"private_key": "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\nQyNTUxOQAAACBpjaF1iAYrBDJhFfdPhrTq8b+QukHc+6z6nIR2Qg5UyQAAAIjj2l7K49pe\nygAAAAtzc2gtZWQyNTUxOQAAACBpjaF1iAYrBDJhFfdPhrTq8b+QukHc+6z6nIR2Qg5UyQ\nAAAECQETTznM5DxU0dwHllam57VSNx/f7lottWHCYtacnOM2mNoXWIBisEMmEV90+GtOrx\nv5C6Qdz7rPqchHZCDlTJAAAAAAECAwQF\n-----END OPENSSH PRIVATE KEY-----\n",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGmNoXWIBisEMmEV90+GtOrxv5C6Qdz7rPqchHZCDlTJ",
"public_key_fingerprint": "SHA256:YqVuver8X2/EcTTiOAlsLnXhRRvnDs+cplptOEPGHDE",
"remaining_uses": "2147483647",
"result_code": "0",
"result_msg": "success"
}
The command can be repeated to create any number of keys.
Native Testing on Localhost
Installation
This discussion assumes that the installation procedure in the README-NATIVE file has been followed, including the creation of a dedicated tms account to run tms_server. The same Automatically Generated Test Data is created as in the Docker installation.
tms_server is a native executable that can be relocated to other directories on the same machine to accommodate local practice. At a minimum, the server needs access to its runtime directory, typically ${HOME}/.tms, and to ${HOME}/tms_customizations, where configuration input and output files reside.
Customizing TMS
For illustration purposes, we’ll run TMS in Minimal Viable Product (MVP) mode, which will require setting some configuration parameters. Most of this section corresponds to the tms_customizations section in README-NATIVE.
First, copy the default configuration file to use as a starting point:
cd ${HOME}/tms_customizations
cp ${HOME}/tms_server/resources/config/tms.toml .
Use a text editor to edit ${HOME}/tms_customizations/tms.toml. Assign the following values to runtime parameters:
enable_mvp = true
enable_test_tenant = true
Save the changes and then copy the custom configuration to TMS’s runtime directory:
cp -p tms.toml ${HOME}/.tms/config
The runtime directory is what tms_server reads and writes during normal execution (${HOME}/tms_customizations is not read during normal server execution).
Running TMS
The simplest way to run TMS natively is to use cargo:
cd ${HOME}/tms_server
cargo run --release
README-NATIVE discusses how to relocate the TMS executable to /opt/tms_server and how to use systemctl to run TMS as a Linux service.
Testing TMS
We begin by querying the TMS version:
curl -k https://localhost:3000/v1/tms/version
The -k parameter on curl allows self-signed certificate shipped with TMS to be accepted, which is appropriate for initial testing but not for production use. The results (with formatting) will look something like this:
{
"git_branch": "main",
"git_commit": "55e1ca0",
"git_dirty": "true",
"result_code": "0",
"result_msg": "success",
"rustc_version": "rustc 1.82.0 (f6e511eec 2024-10-15)",
"source_ts": "2024-11-27T17:36:09Z",
"tms_version": "0.1.0"
}
Creating Keys
In MVP mode, we can easily create key pairs in the test tenant using the test resources generated during installation. To create a new key pair, issue this command:
curl -k -X 'POST' 'https://localhost:3000/v1/tms/pubkeys/creds' -H 'accept: application/json; charset=utf-8' -H 'Content-Type: application/json; charset=utf-8' -d '{"client_user_id": "testuser1", "host": "testhost1", "host_account": "testhostaccount1", "num_uses": -1, "ttl_minutes": -1}' -H 'X-TMS-CLIENT-ID: testclient1' -H 'X-TMS-CLIENT-SECRET: secret1' -H 'X-TMS-TENANT: test'
The key pair is returned in the result along with other information:
{
"expires_at": "9999-12-31T23:59:59Z",
"key_bits": "256",
"key_type": "ed25519",
"max_uses": "2147483647",
"private_key": "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\nQyNTUxOQAAACBpjaF1iAYrBDJhFfdPhrTq8b+QukHc+6z6nIR2Qg5UyQAAAIjj2l7K49pe\nygAAAAtzc2gtZWQyNTUxOQAAACBpjaF1iAYrBDJhFfdPhrTq8b+QukHc+6z6nIR2Qg5UyQ\nAAAECQETTznM5DxU0dwHllam57VSNx/f7lottWHCYtacnOM2mNoXWIBisEMmEV90+GtOrx\nv5C6Qdz7rPqchHZCDlTJAAAAAAECAwQF\n-----END OPENSSH PRIVATE KEY-----\n",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGmNoXWIBisEMmEV90+GtOrxv5C6Qdz7rPqchHZCDlTJ",
"public_key_fingerprint": "SHA256:YqVuver8X2/EcTTiOAlsLnXhRRvnDs+cplptOEPGHDE",
"remaining_uses": "2147483647",
"result_code": "0",
"result_msg": "success"
}
The command can be repeated to create any number of keys.