Introduction to tg CLI (JavaScript)

The tg CLI is a fully featured CLI tool utilising the Twingate GraphQL APIs.

It is open-source and written in JavaScript so Node or Deno developers can extend or customise for their own use cases. Pre-built binaries are provided for all major platforms. Users familiar with Python development may prefer the Python CLI.

Getting Started

Download binaries for Windows, Mac or Linux from our release page on Github.

Unzip the package and insert the following in your terminal:

# ./tg --help
Usage: tg
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
CLI for Twingate
Options:
-h, --help - Show this help.
-V, --version - Show the version number for this program.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO", Values: "TRACE", "DEBUG", "INFO", "WARN",
"ERROR", "SEVERE", "FATAL", "QUIET", "SILENT")
Commands:
export - Export from account to various formats
import - Import from excel file to a Twingate account
resource - Twingate resources
group - Twingate groups
user - Twingate users
network - Twingate networks
connector - Twingate connectors
device - Twingate devices
service - Twingate services
# ./tg export
? Enter Twingate account: › exampleAccount
? Enter API key: › **************************************************************************************************************************************
? Save account and API key to file? › Yes
[INFO] Configuration file saved.
[SUCCESS] Export to 'exampleAccount-2022-06-08_16-57-01.xlsx' completed.

User Command

The user command provides the ability to list all users.

# ./tg user --help
Usage: tg user
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate users
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of users

List All Users

# ./tg user list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────┬───────────┬───────────┬───────────┬──────────┬───────────────────────┬────────────────────────────────────────────────────────────────────────────────────────┬─────────┬─────────┬─────────────────┐
│ id │ createdAt │ updatedAt │ firstName │ lastName │ email │ avatarUrl │ isAdmin │ state │ groups │
├──────────────────┼───────────┼───────────┼───────────┼──────────┼───────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┼─────────┼─────────┼─────────────────┤
│ VXNlcjoxMzY3Ng== │ 6/7/22 │ 6/9/22 │ │ │ xxxx.xxxxxx@gmail.com │ │ FALSE │ Pending │ Everyone, test1 │
├──────────────────┼───────────┼───────────┼───────────┼──────────┼───────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┼─────────┼─────────┼─────────────────┤
│ VXNlcjoxMzYxMA== │ 5/23/22 │ 6/10/22 │ aaaa │ bbbbbb │ xxxx@twingate.com │ │ TRUE │ Active │ Everyone, test1 │
└──────────────────┴───────────┴───────────┴───────────┴──────────┴───────────────────────┴────────────────────────────────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────────────┘

Group Command

The group command provides the ability to list, create, remove and copy groups as well as add users and resources to a group.

# ./tg group --help
Usage: tg group
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate groups
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of groups
create <name> [UserIds...] - Create a group
remove <id> - Remove a group
remove_bulk [groupIds...] - Remove groups bulk
add_user <groupNameOrId> [userIds...] - Add users to a group
remove_user <groupNameOrId> [userIds...] - Remove users to a group
remove_resource <groupNameOrId> [resourceNamesOrIds...] - Add resources to a group
add_resource <groupNameOrId> [resourceNamesOrIds...] - Add resources to a group
set_policy <groupNameOrId> <securityPolicyNameOrId> - Set group security policy
copy <source> <destination> - Copy a group

List All Groups

# ./tg group list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────┬───────────┬───────────┬──────────────┬──────────┬────────┐
│ id │ createdAt │ updatedAt │ name │ isActive │ type │
├──────────────────┼───────────┼───────────┼──────────────┼──────────┼────────┤
│ R3JvdXA6MzE1OTY= │ 5/4/22 │ 5/4/22 │ Everyone │ TRUE │ System │
├──────────────────┼───────────┼───────────┼──────────────┼──────────┼────────┤
│ R3JvdXA6MzQ2NTE= │ 6/8/22 │ 6/8/22 │ exampleGroup │ TRUE │ Manual │
├──────────────────┼───────────┼───────────┼──────────────┼──────────┼────────┤
│ R3JvdXA6MzI4ODM= │ 5/17/22 │ 5/17/22 │ test_group │ TRUE │ Manual │
└──────────────────┴───────────┴───────────┴──────────────┴──────────┴────────┘

Create A New Group

# ./tg group create "exampleGroup"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New group named 'exampleGroup' created with id 'R3JvdXA6MzQ2NTM='.

Create A New Group With Added Users

# ./tg group create "exampleGroup2" "VXNlcjoxMzY3Ng==" "VXNlcjoxMzYxMA=="
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New group named 'exampleGroup2' created with id 'R3JvdXA6MjI4MDc=' with added users 'xxxx@twingate.com: VXNlcjoxMzY3Ng==' 'xxxx@gmail.com: VXNlcjoxMzYxMA=='

Remove A Group

#. /tg group remove "R3JvdXA6MzQ2NTM="
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Removed group with id 'R3JvdXA6MzQ2NTM='

Add Users To A Group

# ./tg group add_user "exampleGroup" "VXNlcjoxMzY3Ng==" "VXNlcjoxMzYxMA=="
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Added users 'xxxx@gmail.com: VXNlcjoxMzY3Ng==' 'xxxx@twingate.com: VXNlcjoxMzYxMA==' to group 'exampleGroup: R3JvdXA6MzQ2NTM='

Remove Users From A Group

# ./tg group remove_user exampleGroup "VXNlcjoxMzY3Ng==" "VXNlcjoxMzYxMA=="
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Removed users 'xxxx@gmail.com: VXNlcjoxMzY3Ng==' 'xxxx@twingate.com: VXNlcjoxMzYxMA==' from group 'exampleGroup: R3JvdXA6MzQ2NTM='

Add Groups To A Resource

# ./tg group add_resource "exampleGroup" "exampleResource1" "exampleResource2"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Added resources 'exampleResource1: UmVzb3VyY2U6MzU5NDg2' 'exampleResource2: UmVzb3VyY2U6MzU5NDg3' to group 'exampleGroup: R3JvdXA6MjI3NTI='

Remove Groups From A Resource

# ./tg group remove_resource "exampleGroup" "exampleResource1" "exampleResource2"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Removed resources 'exampleResource1: UmVzb3VyY2U6MzU5NDg2' 'exampleResource2: UmVzb3VyY2U6MzU5NDg3' from group 'exampleGroup: R3JvdXA6MjI3NTI='

Set Group Policy

# ./tg group set_policy exampleGroup examplePolicy
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Set group 'exampleGroup: R3JvdXA6MjI3NTI=' security policy to 'examplePolicy: U2VjdXJpdHlQb2xpY3k6NjIwMQ=='

Copy A Group

# ./tg group copy "exampleGroup2" "exampleGroup5"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New group named 'exampleGroup9' created as a copy of 'exampleGroup2'

Network Command

The network command provides the ability to list and create remote networks.

# ./tg network --help
Usage: tg network
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate networks
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of networks
create <name> - Create a network

List All Remote Networks

# ./tg network list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────────────┬──────┬──────────┬───────────┬───────────┬───────────────────────────────┐
│ id │ name │ isActive │ createdAt │ updatedAt │ connectors │
├──────────────────────────┼──────┼──────────┼───────────┼───────────┼───────────────────────────────┤
│ UmVtb3RlTmV0d29yazo4MDEw │ 123 │ TRUE │ 6/6/22 │ 6/6/22 │ tourmaline-crow, maroon-rhino │
├──────────────────────────┼──────┼──────────┼───────────┼───────────┼───────────────────────────────┤
│ UmVtb3RlTmV0d29yazo4MDEy │ 234 │ TRUE │ 6/9/22 │ 6/9/22 │ │
└──────────────────────────┴──────┴──────────┴───────────┴───────────┴───────────────────────────────┘

Create A New Remote Network

# ./tg network create "myNewRemoteNetwork"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New network named 'myNewRemoteNetwork' created with id 'UmVtb3RlTmV0d29yazo4MDEz'

Connector Command

The connector command provides the ability to list and create connectors.

# ./tg connector --help
Usage: tg connector
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate connectors
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of connectors
create <remoteNetworkNameOrId> [name] - Create a connector

List All Connectors

# ./tg connector list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────────┬─────────────────────┬───────────┬───────────┬─────────────────┬────────────────────────┬────────────────────┐
│ id │ name │ createdAt │ updatedAt │ lastHeartbeatAt │ state │ remoteNetworkLabel │
├──────────────────────┼─────────────────────┼───────────┼───────────┼─────────────────┼────────────────────────┼────────────────────┤
│ Q29ubmVjdG9yOjUxOQ== │ lavender-pheasant │ 6/13/22 │ 6/13/22 │ │ Offline - No Heartbeat │ 456 │
├──────────────────────┼─────────────────────┼───────────┼───────────┼─────────────────┼────────────────────────┼────────────────────┤
│ Q29ubmVjdG9yOjUxNQ== │ maroon-rhino │ 6/6/22 │ 6/6/22 │ │ Offline - No Heartbeat │ 123 │
├──────────────────────┼─────────────────────┼───────────┼───────────┼─────────────────┼────────────────────────┼────────────────────┤
│ Q29ubmVjdG9yOjUyMQ== │ mysterious-barnacle │ 6/13/22 │ 6/13/22 │ │ Offline - No Heartbeat │ 234 │
├──────────────────────┼─────────────────────┼───────────┼───────────┼─────────────────┼────────────────────────┼────────────────────┤
│ Q29ubmVjdG9yOjUyMA== │ smooth-auk │ 6/13/22 │ 6/13/22 │ │ Offline - No Heartbeat │ 456 │
├──────────────────────┼─────────────────────┼───────────┼───────────┼─────────────────┼────────────────────────┼────────────────────┤
│ Q29ubmVjdG9yOjUxNA== │ tourmaline-crow │ 6/6/22 │ 6/6/22 │ │ Offline - No Heartbeat │ 123 │
└──────────────────────┴─────────────────────┴───────────┴───────────┴─────────────────┴────────────────────────┴────────────────────┘

Create A New Connector

# ./tg connector create "myRemoteNetwork" "myNewConnector"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New Connector named 'myNewConnector' created with id 'UmVtb3RlTmV0d29yazo4MDEz' in network 'myRemoteNetwork' with tokens:
ACCESS_TOKEN=xxxxxxxxxx
REFRESH_TOKEN=xxxxxxxxxx

Resource Command

The resource command provides the ability to list, create, remove resources as well as add groups to a resource.

# ./tg resource --help
Usage: tg resource
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate resources
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of resources
create <remoteNetworkNameOrId> <name> <address> - Create a resource
[groupNamesOrIds...]
remove <id> - Remove a resource
remove_bulk [resourceIds...] - Remove resources bulk
add_group <resourceNameOrId> [groupNamesOrIds...] - Add groups to a resource

List All Resources

# ./tg resource list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────────┬────────────────────────┬───────────┬───────────┬──────────┬────────────────────┬─────────────┬───────────────────────┬────────────────────┬────────────────────┬───────────────────┬────────────────────┬───────────────────┐
│ id │ name │ createdAt │ updatedAt │ isActive │ remoteNetworkLabel │ addressType │ addressValue │ protocolsAllowIcmp │ protocolsTcpPolicy │ protocolsTcpPorts │ protocolsUdpPolicy │ protocolsUdpPorts │
├──────────────────────┼────────────────────────┼───────────┼───────────┼──────────┼────────────────────┼─────────────┼───────────────────────┼────────────────────┼────────────────────┼───────────────────┼────────────────────┼───────────────────┤
│ UmVzb3VyY2U6MzU5NDM3 │ r8888 │ 6/10/22 │ 6/10/22 │ TRUE │ 123 │ DNS │ 2.2.2.2 │ TRUE │ ALLOW_ALL │ │ ALLOW_ALL │ │
├──────────────────────┼────────────────────────┼───────────┼───────────┼──────────┼────────────────────┼─────────────┼───────────────────────┼────────────────────┼────────────────────┼───────────────────┼────────────────────┼───────────────────┤
│ UmVzb3VyY2U6MzU5NDQ3 │ tg test │ 6/13/22 │ 6/13/22 │ TRUE │ 123 │ IP │ 1.1.1.1 │ TRUE │ ALLOW_ALL │ │ ALLOW_ALL │ │
├──────────────────────┼────────────────────────┼───────────┼───────────┼──────────┼────────────────────┼─────────────┼───────────────────────┼────────────────────┼────────────────────┼───────────────────┼────────────────────┼───────────────────┤
│ UmVzb3VyY2U6MzU5NDMz │ tg_resource_name_111 │ 6/10/22 │ 6/10/22 │ TRUE │ 123 │ DNS │ 3.3.3.3 │ TRUE │ ALLOW_ALL │ │ ALLOW_ALL │ │
├──────────────────────┼────────────────────────┼───────────┼───────────┼──────────┼────────────────────┼─────────────┼───────────────────────┼────────────────────┼────────────────────┼───────────────────┴────────────────────┴───────────────────┘

Create A New Resource

# ./tg resource create "myRemoteNetwork" "myNewResource" "1.1.1.1"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New resource named 'myNewResource' created with id 'UmVzb3VyY2U6MzU5NDQ4' in network 'myRemoteNetwork'

Create A New Resource With Added Groups

# ./tg resource create "myRemoteNetwork" "myNewResource2" "2.2.2.2" "testGroup1" "testGroup2"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New resource named 'myNewResource2' created with id 'UmVzb3VyY2U6MzU5NDcy' in network 'myRemoteNetwork' with added groups 'testGroup1: R3JvdXA6MjI3NTI=' 'testGroup2: R3JvdXA6MjI3NTM='

Add Groups To A Resource

# ./tg resource add_group "myResource" "testGroup3" "testGroup4"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Added groups 'testGroup3: R3JvdXA6MjI4MDM=' 'testGroup4: R3JvdXA6MjI4MDU=' to resource 'myResource: UmVzb3VyY2U6MzU5NDg2'

Remove Groups From A Resource

# ./tg resource remove_group "myResource" "testGroup3" "testGroup4"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Removed groups 'testGroup3: R3JvdXA6MjI4MDM=' 'testGroup4: R3JvdXA6MjI4MDU=' from resource 'myResource: UmVzb3VyY2U6MzU5NDg2'

Device Command

The device command provides the ability to list all devices.

# ./tg device --help
Usage: tg device
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate devices
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of devices

List All Devices

# ./tg device list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────────┬────────────────────────┬───────────┬─────────────────┬───────────────────┬───────────────────────┬────────────┬─────────┬──────────────┬───────────────┬─────────────────────┬─────────────────────────┬─────────────┬──────────────────────┬─────────────────────┬───────────────────────┐
│ id │ name │ isTrusted │ lastConnectedAt │ lastFailedLoginAt │ lastSuccessfulLoginAt │ deviceType │ osName │ osVersion │ clientVersion │ hardwareModel │ hostname │ username │ serialNumber │ manufacturerName │ userLabel │
├──────────────────────┼────────────────────────┼───────────┼─────────────────┼───────────────────┼───────────────────────┼────────────┼─────────┼──────────────┼───────────────┼─────────────────────┼─────────────────────────┼─────────────┼──────────────────────┼─────────────────────┼───────────────────────┤
│ RGV2aWNlOjIwMDgzMA== │ XXXXXX MacBook Pro │ FALSE │ │ │ 5/24/22 │ Laptop │ MacOS │ 12.3.1 │ 1.0.20.3453 │ MacBookPro18,3 │ xxxxx-macbook-pro.local │ XXXXXXXXXXX │ XXXXXXXXXX │ Apple Inc. │ xxxx@twingate.com │
├──────────────────────┼────────────────────────┼───────────┼─────────────────┼───────────────────┼───────────────────────┼────────────┼─────────┼──────────────┼───────────────┼─────────────────────┼─────────────────────────┼─────────────┼──────────────────────┼─────────────────────┼───────────────────────┤
│ RGV2aWNlOjE5NDU5MA== │ XXXXXX │ FALSE │ │ │ 5/16/22 │ Desktop │ Windows │ 10.0.19043.0 │ 1.0.17.10571 │ System Product Name │ XXXXXX │ XXXXX\\XXXX │ System Serial Number │ System manufacturer │ xxxxxxxxxxx@gmail.com │
└──────────────────────┴────────────────────────┴───────────┴─────────────────┴───────────────────┴───────────────────────┴────────────┴─────────┴──────────────┴───────────────┴─────────────────────┴─────────────────────────┴─────────────┴──────────────────────┴─────────────────────┴───────────────────────┘

Policy Command

The policy command provides the ability to list and add groups to a security policy.

# ./tg policy --help
Usage: tg policy
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate policies
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of policies
add_group <securityPolicyNameOrId> [groupNamesOrIds...] - Add groups to a security policy.

List All Policies

# ./tg policy list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────────────────┬────────────────┬───────────┬───────────┬─────────────────────────────────┬──────────────────┐
│ id │ name │ createdAt │ updatedAt │ groups │ policyType │
├──────────────────────────────┼────────────────┼───────────┼───────────┼─────────────────────────────────┼──────────────────┤
│ U2VjdXJpdHlQb2xpY3k6NDY2NQ== │ Default Policy │ 5/23/22 │ 6/2/22 │ Everyone, xxx, xxx │ DEFAULT_RESOURCE │
├──────────────────────────────┼────────────────┼───────────┼───────────┼─────────────────────────────────┼──────────────────┤
│ U2VjdXJpdHlQb2xpY3k6NjIwMQ== │ examplePolicy │ 8/17/22 │ 8/17/22 │ DB Admins, Engineers, End Users │ RESOURCE │
└──────────────────────────────┴────────────────┴───────────┴───────────┴─────────────────────────────────┴──────────────────┘

Add Groups To A Policy

# ./tg policy add_group examplePolicy exampleGroup1 exampleGroup2
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Added groups 'exampleGroup1: R3JvdXA6MjQyNjU=' 'exampleGroup2: R3JvdXA6MjQyNjY=' to security policy 'examplePolicy: U2VjdXJpdHlQb2xpY3k6NjIwMQ=='

Service Command

The service command provides the ability to list, create, remove service accounts as well as create service key and add resources to a service account.

# ./tg service --help
Usage: tg service
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate service
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of services
create <name> [resourceNamesOrIds...] - Create a service
remove <id> - Remove a service
add_resource <serviceAccountId> [resourceNamesOrIds...] - Add resources to a service
key_create <serviceAccountId> <keyName> <expirationTimeInDays> - Create a service account key

List All Service Accounts

# ./tg service list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────────────────────────────────────────────────────────┬──────────────┬───────────┬───────────┬───────────┬────────────────┐
│ id │ name │ createdAt │ updatedAt │ resources │ keysTotalCount │
├──────────────────────────────────────────────────────────────────────┼──────────────┼───────────┼───────────┼───────────┼────────────────┤
│ U2VydmljZUFjY291bnQ6MzYyNDNiMDQtZGE1ZC00Y2IyLThjOGYtYmExYzE2NWQxZTFj │ test account │ 6/13/22 │ 6/13/22 │ │ 0 │
└──────────────────────────────────────────────────────────────────────┴──────────────┴───────────┴───────────┴───────────┴────────────────┘

Create A New Service Account

# ./tg service create myNewServiceAccount
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New service named 'myNewServiceAccount' created with id 'U2VydmljZUFjY291bnQ6Zjc3MDI4OTktMmJlNC00MTdlLWE5ZDctZGYyMmJlZDJiZmIx'.

Create A New Service Account With Added Resources

# ./tg service create "myNewServiceAccount2" "myResource1" "myResource2"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] New service named 'myNewServiceAccount2' created with id 'U2VydmljZUFjY291bnQ6YWIwZjZmMTYtYmNjMy00N2EyLTlmY2MtZmY5ODI0YmE5Y2Uw' with added resources 'myResource1: UmVzb3VyY2U6MzU5NDg2' 'myResource2: UmVzb3VyY2U6MzU5NDg3'

Remove A Service Account

# ./tg service remove U2VydmljZUFjY291bnQ6OWI5MDc1YWItZGYwZC00NWFlLTg2NzEtYzExMzMxOTA3OTMx
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Removed service with id 'U2VydmljZUFjY291bnQ6OWI5MDc1YWItZGYwZC00NWFlLTg2NzEtYzExMzMxOTA3OTMx'.

Add Resources To A Service Account

# ./tg service add_resource "U2VydmljZUFjY291bnQ6MzYyNDNiMDQtZGE1ZC00Y2IyLThjOGYtYmExYzE2NWQxZTFj" "myResource1" "myResource2"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Added resources 'myResource1: UmVzb3VyY2U6MzU5NDg2' 'myResource2: UmVzb3VyY2U6MzU5NDg3' to service 'myNewServiceAccount: U2VydmljZUFjY291bnQ6Zjc3MDI4OTktMmJlNC00MTdlLWE5ZDctZGYyMmJlZDJiZmIx'

Create A Service Key

# ./tg service key_create "U2VydmljZUFjY291bnQ6NDVhZjU2NDgtMDMwMi00NWQ3LTlmMDYtNTk3YzRlYTZjM2E5" "exampleKeyName" "365"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Created key 'exampleKeyName: U2VydmljZUFjY291bnRLZXk6bmFLS3VpbHVPV2lkRTlwV1dxS0tmRUVneHM1STV4blF4RW9nMXBNc1Nxcw==' at service 'testService: U2VydmljZUFjY291bnQ6NDVhZjU2NDgtMDMwMi00NWQ3LTlmMDYtNTk3YzRlYTZjM2E5' with token object:
{"version": "1", "network": "exampleNetwork", "service_account_id": "45af5648-0302-45d7-9f06-597c4ea6c3a9", "private_key": "-----BEGIN PRIVATE KEY-----xxxxxxxxxx-----END PRIVATE KEY-----", "key_id": "naKKuiluOWidE9pWWqKKfEEgxs5I5xnQxEog1pMsSqs", "login_path": "/api/v2/headless_node/login"}

Export Command

The tg CLI provides the ability to export account info from the Twingate in varies formats (e.g. resources, devices, groups and users).

# ./tg export --help
Usage: tg export
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Export from account to various formats
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
-f, --format [value] - Export format (Default: "xlsx", Values: "xlsx", "json", "dot", "png",
"svg")
-o, --output-file [value] - Output filename
-n, --remote-networks [boolean] - Include Remote Networks
-r, --resources [boolean] - Include Resources
-g, --groups [boolean] - Include Groups
-u, --users [boolean] - Include Users
-d, --devices [boolean] - Include Devices (trust)

To export all info into xlsx format

# ./tg export
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Export to 'exampleAccount-2022-06-08_17-40-15.xlsx' completed.

To export resource info in JSON format

# ./tg export -r -f json
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Export to 'exampleAccount-2022-06-08_17-41-27.json' completed.

Note: png and svg format requires the GraphViz package to be installed and available on your path.

Import Command

The import command provides the ability to import all info from a given source (e.g. output generated from the export command)

# ./tg import --help
Usage: tg import
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Import from excel file to a Twingate account
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
-f, --file <string> - Path to Excel file to import from (required)
-n, --remote-networks [boolean] - Include Remote Networks
-r, --resources [boolean] - Include Resources
-g, --groups [boolean] - Include Groups
-d, --devices [boolean] - Include Devices (trust)
-s, --sync [boolean] - Attempt to synchronise entities with the same natural identifier
-y, --assume-yes [boolean] - Automatic yes to prompts; assume 'yes' as answer to all prompts

Last updated 9 months ago