+ + +
The OnlyKey Command-Line Utility is a command line interface to OnlyKey.
+ + + + + + + +
+ + + + +

onlykey-cli

+ +

OnlyKey-cli - A command line interface to the OnlyKey (Similar functionality to OnlyKey App) that can be used for configuration, scripting, and testing.

+ +

Installation

+ +

Windows Stand-Alone EXE

+

No install is required. Download and run the EXE to open OnlyKey CLI interactive mode or run directly from command line like this:

+
C:\ onlykey-cli.exe getlabels
+
+ +

Download here

+ +

Windows Install with dependencies

+

1) Python 3.8 and pip3 are required. To setup a Python environment on Windows we recommend Anaconda https://www.anaconda.com/download/#windows

+ +

2) From an administrator command prompt run:

+
pip3 install hidapi==0.9.0 onlykey
+
+ +

You should see a message showing where the executable is installed. This is usually c:\python39\scripts\onlykey-cli.exe

+ +

MacOS Install with dependencies

+

Python 3.8 and pip3 are required. To setup a Python environment on MacOS we recommend Anaconda https://www.anaconda.com/download/#macos

+
$ brew install libusb
+$ pip3 install onlykey
+
+ +

Linux/BSD Install with dependencies

+ +

In order for non-root users in Linux to be able to communicate with OnlyKey a udev rule must be created as described here.

+ +

Ubuntu Install with dependencies

+
$ sudo apt update && sudo apt upgrade
+$ sudo apt install python3-pip python3-tk libusb-1.0-0-dev libudev-dev
+$ pip3 install onlykey
+$ wget https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules
+$ sudo cp 49-onlykey.rules /etc/udev/rules.d/
+$ sudo udevadm control --reload-rules && udevadm trigger
+
+ +

Debian Install with dependencies

+
$ sudo apt update && sudo apt upgrade
+$ sudo apt install python3-pip python3-tk libusb-1.0-0-dev libudev-dev
+$ pip3 install onlykey
+$ wget https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules
+$ sudo cp 49-onlykey.rules /etc/udev/rules.d/
+$ sudo udevadm control --reload-rules && udevadm trigger
+
+ +

RedHat Install with dependencies

+
$ yum update
+$ yum install python3-pip python3-devel python3-tk libusb-devel libudev-devel \
+              gcc redhat-rpm-config
+$ pip3 install onlykey
+$ wget https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules
+$ sudo cp 49-onlykey.rules /etc/udev/rules.d/
+$ sudo udevadm control --reload-rules && udevadm trigger
+
+ +

Fedora Install with dependencies

+
$ dnf install python3-pip python3-devel python3-tkinter libusb-devel libudev-devel \
+              gcc redhat-rpm-config
+$ pip3 install onlykey
+$ wget https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules
+$ sudo cp 49-onlykey.rules /etc/udev/rules.d/
+$ sudo udevadm control --reload-rules && udevadm trigger
+
+ +

OpenSUSE Install with dependencies

+
$ zypper install python3-pip python3-devel python3-tk libusb-1_0-devel libudev-devel
+$ pip3 install onlykey
+$ wget https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules
+$ sudo cp 49-onlykey.rules /etc/udev/rules.d/
+$ sudo udevadm control --reload-rules && udevadm trigger
+
+ +

Arch Linux Install with dependencies

+
$ sudo pacman -Sy git python3-setuptools python3 libusb python3-pip
+$ pip3 install onlykey
+$ wget https://raw.githubusercontent.com/trustcrypto/trustcrypto.github.io/pages/49-onlykey.rules
+$ sudo cp 49-onlykey.rules /etc/udev/rules.d/
+$ sudo udevadm control --reload-rules && udevadm trigger
+
+ +

FreeBSD Install with dependencies

+ +

See forum thread here

+ +

QuickStart

+ +

Usage: onlykey-cli [OPTIONS]

+ +

Setup Options

+ +

init

+

A command line tool for setting PIN on OnlyKey (Initial Configuration)

+ +

General Options

+ +

version

+

Displays the version of the app

+ +

fwversion

+

Displays the version of the OnlyKey firmware

+ +

wink

+

OnlyKey flashes blue (winks), may be used for visual confirmation of connectivity

+ +

getlabels

+

Returns slot labels

+ +

settime

+

A command for setting time on OnlyKey, time is needed for TOTP (Google Authenticator)

+ +

getkeylabels

+

Returns key labels for RSA keys 1-4 and ECC keys 1-16

+ +

rng [type]

+

Access OnlyKey TRNG to generate random numbers:

+
    +
  • [type] must be one of the following: +
      +
    • hexbytes - Output hex encoded random bytes. Default 8 bytes; Maximum 255 bytes. Specify number of bytes to return with –count i.e. 'onlykey-cli rng hexbytes --count 32'
    • +
    • feedkernel - Feed random bytes to /dev/random.
    • +
    +
  • +
+ +

OnlyKey Preferences Options

+ +

idletimeout [num]

+

OnlyKey locks after ideletimeout is reached (1 – 255 minutes; default = 30; 0 to disable). More info

+ +

wipemode [num]

+

Configure how the OnlyKey responds to +a factory reset. WARNING - Setting to Full Wipe mode cannot be changed. +1 = Sensitive Data Only (default); 2 = Full Wipe (recommended for plausible deniability users) Entire device is wiped. Firmware must be reloaded. More info

+ +

keylayout [num]

+

Set keyboard layout

+
    +
  • 1 - USA_ENGLISH (Default)
  • +
  • 2 - CANADIAN_FRENCH
  • +
  • 3 - CANADIAN_MULTILINGUAL
  • +
  • 4 - DANISH
  • +
  • 5 - FINNISH
  • +
  • 6 - FRENCH
  • +
  • 7 - FRENCH_BELGIAN
  • +
  • 8 - FRENCH_SWISS
  • +
  • 9 - GERMAN
  • +
  • 10 - GERMAN_MAC
  • +
  • 11 - GERMAN_SWISS
  • +
  • 12 - ICELANDIC
  • +
  • 13 - IRISH
  • +
  • 14 - ITALIAN
  • +
  • 15 - NORWEGIAN
  • +
  • 16 - PORTUGUESE
  • +
  • 17 - PORTUGUESE_BRAZILIAN
  • +
  • 18 - SPANISH
  • +
  • 19 - SPANISH_LATIN_AMERICA
  • +
  • 20 - SWEDISH
  • +
  • 21 - TURKISH
  • +
  • 22 - UNITED_KINGDOM
  • +
  • 23 - US_INTERNATIONAL
  • +
  • 24 - CZECH
  • +
  • 25 - SERBIAN_LATIN_ONLY
  • +
  • 26 - HUNGARIAN
  • +
  • 27 - DANISH MAC
  • +
  • 28 - US_DVORAK
  • +
+ +

More info

+ +

keytypespeed [num]

+

1 = slowest; 10 = fastest [7 = default] +More info

+ +

ledbrightness [num]

+

1 = dimmest; 10 = brightest [8 = default] +More info

+ +

touchsense [num]

+

Change the OnlyKey’s button touch sensitivity. +WARNING: Setting button’s touch sensitivity lower than 5 is not recommended as this could result in inadvertent button press. +2 = highest sensitivity; 100 = lowest sensitivity [12 = default]

+ +

2ndprofilemode [num]

+

Set during init (Initial Configuration) to set 2nd profile type 1 = standard (default); 2 = plausible deniability

+ +

storedkeymode [num]

+

Enable or disable challenge for stored keys (SSH/PGP) +0 = Challenge Code Required (default); 1 = Button Press Required +More info

+ +

derivedkeymode [num]

+

Enable or disable challenge for stored keys (SSH/PGP) +0 = Challenge Code Required (default); 1 = Button Press Required +More info

+ +

hmackeymode [num]

+

Enable or disable button press for HMAC challenge-response +0 = Button Press Required (default); 1 = Button Press Not Required. +More info

+ +

backupkeymode [num]

+

1 = Lock backup key so this may not be changed on device +WARNING - Once set to “Locked” this cannot be changed unless a factory reset occurs. +More info

+ +

sysadminmode

+

Enable or disable challenge for stored keys (SSH/PGP) +0 = Challenge Code Required (default); 1 = Button Press Required +More info

+ +

lockbutton

+

Enable or disable challenge for stored keys (SSH/PGP) +0 = Challenge Code Required (default); 1 = Button Press Required +More info

+ +

Slot Config Options

+ +

setslot [id] [type] [value]

+
    +
  • [id] must be slot number 1a - 6b for OnlyKey or 1-24 for OnlyKey DUO
  • +
  • [type] must be one of the following: +
      +
    • label - set slots (1a - 6b) to have a descriptive label i.e. My Google Acct
    • +
    • url - URL to login page
    • +
    • delay1 - set a 0 - 9 second delay
    • +
    • addchar1 - Additional character before username 1 for TAB, 0 to clear
    • +
    • username - Username to login
    • +
    • addchar2 - Additional character after username 1 for TAB, 2 for RETURN
    • +
    • delay2 - set a 0 - 9 second delay
    • +
    • password - Password to login
    • +
    • addchar3 - Additional character after password 1 for TAB, 2 for RETURN
    • +
    • delay3 - set a 0 - 9 second delay
    • +
    • addchar4 - Additional character before OTP 1 for TAB
    • +
    • 2fa - type of two factor authentication +
        +
      • g - Google Authenticator
      • +
      • y - Yubico OTP
      • +
      • u - U2F
      • +
      +
    • +
    • totpkey - Google Authenticator key
    • +
    • addchar5 - Additional character after OTP 2 for RETURN
    • +
    +
  • +
+ +

wipeslot [id]

+
    +
  • [id] must be slot number 1a - 6b for OnlyKey or 1-24 for OnlyKey DUO
  • +
+ +

Key Config Options

+ +

setkey [key slot] [type] [features] [hex key]

+

Sets raw private keys and key labels, to set PEM format keys use the OnlyKey App

+
    +
  • [key slot] must be key number RSA1 - RSA4, ECC1 - ECC16, HMAC1 - HMAC2
  • +
  • [type] must be one of the following: +
      +
    • label - set to have a descriptive key label i.e. My GPG signing key
    • +
    • x - X25519 Key Type (32 bytes)
    • +
    • n - NIST256P1 Key Type (32 bytes)
    • +
    • s - SECP256K1 Key Type (32 bytes)
    • +
    • 2 - RSA Key Type 2048bits (256 bytes)
    • +
    • 4 - RSA Key Type 4096bits (512 bytes)
    • +
    • h - HMAC Key Type (20 bytes)
    • +
    +
  • +
  • [features] must be one of the following: +
      +
    • s - Use for signing
    • +
    • d - Use for decryption
    • +
    • b - Use for encryption/decryption of backups
    • +
    +
  • +
  • For setting keys see examples here.
  • +
+ +

genkey [key slot] [type] [features]

+

Generates random private key on device

+
    +
  • [key slot] must be key number ECC1 - ECC16 (only ECC keys supported)
  • +
  • [type] must be one of the following: +
      +
    • x - X25519 Key Type (32 bytes)
    • +
    • n - NIST256P1 Key Type (32 bytes)
    • +
    • s - SECP256K1 Key Type (32 bytes)
    • +
    +
  • +
  • [features] must be one of the following: +
      +
    • s - Use for signing
    • +
    • d - Use for decryption
    • +
    • b - Use for encryption/decryption of backups
    • +
    +
  • +
  • For generating key see example here.
  • +
+ +

wipekey [key id]

+

Erases key stored at [key id]

+
    +
  • [key id] must be key number RSA1 - RSA4, ECC1 - ECC16, HMAC1 - HMAC2
  • +
+ +

FIDO2 Config Options

+ +

ping

+

Sends a FIDO2 transaction to the device, which immediately echoes the same data back. This command is defined to be a uniform function for debugging, latency and performance measurements (CTAPHID_PING).

+ +

set-pin

+

Set new FIDO PIN, this is the PIN entered via keyboard and used for FIDO2 register/login (not the OnlyKey PIN entered on device).

+ +

change-pin

+

Change FIDO PIN, this is the PIN entered via keyboard and used for FIDO2 register/login (not the OnlyKey PIN entered on device, to change that PIN use the OnlyKey Desktop App).

+ +

credential [operation] [credential ID]

+
    +
  • [operation] must be one of the following: +
      +
    • info - Display number of existing resident keys and remaining space.
    • +
    • ls - List resident keys.
    • +
    • rm [credential ID] - Remove resident keys, example here.
    • +
    +
  • +
+ +

reset

+

Reset wipes all FIDO U2F and FIDO2 credentials!!! It is highly recommended to backup device prior to reset.

+ +

Running Command Options

+ +

You can run commands in two ways:

+ +

1) Directly in terminal

+ +

Like this:

+ +
$ onlykey-cli getlabels
+
+Slot 1a:
+Slot 1b:
+
+Slot 2a:
+Slot 2b:
+
+Slot 3a:
+Slot 3b:
+
+Slot 4a:
+Slot 4b:
+
+Slot 5a:
+Slot 5b:
+
+Slot 6a:
+Slot 6b:
+
+$ onlykey-cli setslot 1a label ok
+Successfully set Label
+$ onlykey-cli getlabels
+
+Slot 1a: ok
+Slot 1b:
+
+Slot 2a:
+Slot 2b:
+
+Slot 3a:
+Slot 3b:
+
+Slot 4a:
+Slot 4b:
+
+Slot 5a:
+Slot 5b:
+
+Slot 6a:
+Slot 6b:
+
+
+ +

2) Interactive Mode

+ +

Or you can run commands in an interactive shell like this:

+ +
$ onlykey-cli
+OnlyKey CLI v1.2.8
+Press the right arrow to insert the suggestion.
+Press Control-C to retry. Control-D to exit.
+
+OnlyKey> getlabels
+
+Slot 1a:
+Slot 1b:
+
+Slot 2a:
+Slot 2b:
+
+Slot 3a:
+Slot 3b:
+
+Slot 4a:
+Slot 4b:
+
+Slot 5a:
+Slot 5b:
+
+Slot 6a:
+Slot 6b:
+
+OnlyKey> setslot 1a label ok
+
+Successfully set Label
+
+OnlyKey> getlabels
+
+Slot 1a: ok
+Slot 1b:
+
+Slot 2a:
+Slot 2b:
+
+Slot 3a:
+Slot 3b:
+
+Slot 4a:
+Slot 4b:
+
+Slot 5a:
+Slot 5b:
+
+Slot 6a:
+Slot 6b:
+
+OnlyKey> setslot 1a url accounts.google.com
+
+Successfully set URL
+
+OnlyKey> setslot 1a addchar1 2
+
+Successfully set Character1
+
+OnlyKey> setslot 1a delay1 2
+
+Successfully set Delay1
+
+OnlyKey> setslot 1a username onlykey.1234
+
+Successfully set Username
+
+OnlyKey> setslot 1a addchar2 2
+
+Successfully set Character2
+
+OnlyKey> setslot 1a delay2 2
+
+Successfully set Delay2
+
+OnlyKey> setslot 1a password
+
+Type Control-T to toggle password visible.
+Password: *********
+Successfully set Password
+
+OnlyKey> setslot 1a addchar3 2
+
+Successfully set Character3
+
+OnlyKey> setslot 1a delay3 2
+
+Successfully set Delay3
+
+OnlyKey> setslot 1a 2fa g
+
+Successfully set 2FA Type
+
+OnlyKey> setslot 1a totpkey
+
+Type Control-T to toggle password visible.
+Password: ********************************
+Successfully set TOTP Key
+
+OnlyKey> setslot 1a addchar4 2
+
+Successfully set Character4
+
+OnlyKey>
+
+Bye!
+
+ +

Examples

+ +

Writing Private Keys and Passwords

+ +

Keys/passwords are masked when entered and should only be set from interactive mode and not directly from terminal. Entering directly from terminal is not secure as command history is stored.

+ +

Setkey Examples

+ +

To set key a device must first be put into config mode.

+ +

Set HMAC key 1 to a custom value

+ +

$ onlykey-cli

+ +

OnlyKey> setkey HMAC1 h

+ +

Type Control-T to toggle password visible. +Password/Key: **************

+ +

Successfully set ECC Key

+ +

HMAC key must be 20 bytes, h is HMAC type

+ +

Set HMAC key 2 to a custom value

+ +

$ onlykey-cli

+ +

OnlyKey> setkey HMAC2 h

+ +

Type Control-T to toggle password visible. +Password/Key: **************

+ +

Successfully set ECC Key

+ +

HMAC key must be 20 bytes, h is HMAC type

+ +

Set ECC key in slot ECC1 to a custom value (Slots ECC1-ECC16 are available for ECC keys. Supported ECC curves X25519(x), NIST256P1(n), SECP256K1(s))

+ +

$ onlykey-cli

+ +

OnlyKey> setkey ECC1 x

+ +

Type Control-T to toggle password visible. +Password/Key: *********************

+ +

Successfully set ECC Key

+ +

ECC key must be 32 bytes, x is X25519 type

+ +

Genkey Examples

+ +

To set key a device must first be put into config mode.

+ +

Generate ECC key in slot ECC1 to a custom value (Slots ECC1-ECC16 are available for ECC keys. Supported ECC curves X25519(x), NIST256P1(n), SECP256K1(s))

+ +

$ onlykey-cli

+ +

OnlyKey> genkey ECC1 x

+ +

Successfully set ECC Key

+ +

Scripting Example

+ +

Set time on OnlyKey (required for TOTP)

+ +

$ onlykey-cli settime

+ +

This can be added to scripts such as the UDEV rule to automatically set time when device is inserted into USB port. See example here

+ +

Scripted provisioning of an OnlyKey slots and keys can be done by creating a script that sets multiple values on OnlyKey

+ +

List and Remove FIDO2 Resident Key

+ +

List current resident keys:

+ +
onlykey-cli credential ls
+
+

+ +

Remove a resident key by credential ID

+ +
onlykey-cli credential rm eu7LPIjTNwIJt2Ws9LWJlXkiNKaueSEEGteZM2MT/lZtEuYo49V6deCiIRMb6EDC29XG13nBL60+Yx+6hxSUYS1uxX9+AA==
+
+ +

Once removed, list current resident keys to verify:

+ +

+ +

Source

+ +

OnlyKey CLI on Github

+ + + +
+ + Tags: + + + + + + + + + +
+ + + + + + + Edit me + + + +