Features and functionality of the Keeper Connection Manager interface
Keeper Connection Manager provides access to the functionality of a desktop from within your web browser. The interface is designed to be as seamless and unobtrusive as possible.
Selecting connections and user settings.
Features and functionality of the connection session and the sidebar menu.
Manage the clipboard, view multiple connections at once, upload or download files, and change input settings within a connection session
How to create Keeper Connection Manager connections for each supported protocol type
Configure and use Keeper Connection Manager drag-and-drop file transfer
Share access to Keeper Connection Manager connections with anyone with an internet browser
How to configure screen and keystroke recording for all session types.
Keeper Connection Manager User Guide - Login Screen
The login screen is the first screen users see when they access Keeper Connection Manager. Users use a username and password, or SSO credentials to authenticate into the rest of the platform.
Users use their username to login to Keeper Connection Manager. This username is set when creating or importing users.
The user's password. Set when creating or importing the user. Passwords can also be reset by users if allowed.
See the authentication documentation pages for more information about setting up additional login methods such as LDAP, SAML 2.0, and OpenID Connect as well as information on setting up 2FA
Authentication OptionsAs of KCM version 2.9.6, KCM can be configured to limit a user's ability to login after multiple consecutive failed login attempts. This blocks brute-force login attacks on KCM instances.
This setting can be removed, and the number of attempts before a user is locked out and how long they are locked for can be configured with the following guacamole properties or environment variables (depending on installation method):
ban-max-invalid-attempts
BAN_MAX_INVALID_ATTEMPTS
number
The number of invalid attempts before a user is locked out
ban-address-duration
BAN_ADDRESS_DURATION
number
The amount of time in seconds a user is locked out for after hitting the invalid attempts limit
ban-max-addresses
BAN_MAX_ADDRESSES
number
The number of addresses that KCM will track to check for invalid attempts. Defaults to 10485760
Keeper Connection Manager user guide - home screen
The Keeper Connection Manager home screen provides quick access to any connection that you have been granted access to.
If you have access to multiple connections, you will be taken to the dashboard where all available connections are listed. If you only have access to a single connection, you will be routed directly to that connection.
The home screen contains a list of all connections to which you have access, along with thumbnails of any recently used or active connections. Thumbnail images update dynamically while a machine is being accessed. If you have access to a large number of connections and wish to quickly locate a specific connection, you can also enter search terms within the “Filter” field to filter the list of connections by name.
Clicking on any connection will open that connection within the current window or tab, but multiple connections can be used simultaneously.
Each connection you use will remain active until explicitly disconnected, or until you navigate away from Keeper Connection Manager entirely. Active connections can be seen as thumbnails updating in real-time on the home screen.
With the exception of the client connection screen, all Keeper Connection Manager screens contain a menu in the upper-right corner called the “user menu”. This menu displays your username and contains several options which depend on your level of access.
Navigates back to the home screen, if you are not already there. If you only have access to one connection, this will be replaced with a link to that connection.
Navigates to the settings interface, which provides the core Administrative functions (if you have rights to access this area) and and user preferences such as display language.
Logs out of Keeper Connection Manager completely, closing all current connections and ending the Keeper Connection Manager session.
Managing and creating connections to your infrastructure
Connections specify the protocol and customizable parameters that define the authentication and customized behavior. Connections can be created from the Settings menu. Only users with "Create new connections" permission can create connections.
Administrators can define which connections are available for users and groups.
Connections can be created and utilized in several ways. Connections can be privileged (credentials hidden from the user) and the connections can support user-specified credentials. Additionally, the connections can pull credentials from one or more Keeper Vaults via the Keeper Secrets Manager integration.
When setting up a privileged connection, the authentication credentials to the target can be saved in the connection parameters, or in the designated Keeper Vault. When the credentials are stored directly to the connection or in the Keeper Vault, they are never exposed to the end-user. This allows you to create privileged sessions in which the user does not have access to the underlying credentials.
When setting up the connection, you can skip the authentication details parameters and Keeper Connection Manager will prompt the end-user for their authentication credentials on every login.
For example, with an RDP connection, simply remove the credentials from the connection parameters and the user will be prompted to authenticate.
KCM can connect to a Keeper Vault and search for the necessary credentials needed based on Host, User and Domain. See the Vault Integration section to learn more about this capability.
The New Connection form is separated into multiple sections each with multiple inputs. Connections have many different options and capabilities, depending on the protocol.
To begin, click Settings > Connections > New Connection which will open the new connection form.
The name of the connection, this is how it will appear in the connections list.
The location of the new connection in the connections list. You can select "ROOT" to put the new connection at the top level of the connections list, or select a collection to place the new connection under an existing collection.
Select the type of connection to create. The current available connection types are:
RDP
SSH
Kubernetes
Telnet
VNC
MySQL
PostgreSQL
Microsoft SQL Server
For more information about connection types, see the supported protocols section.
The maximum allowed number of concurrent sessions for this connections. If the maximum number is sessions are already in use, other users will not be able to connect to this connection.
The maximum allowed number of concurrent sessions for this connection for each user. If the maximum number is sessions are already in use by a user, the user will not be able to open a new session for this connection.
Keeper Connection Manager can use load balancing among connections in a group to give multiple concurrent users the best experience.
Enter a number to use as a multiplier of connection assignment. For example, if one connection in a group has a weight of 1, and another has a weight of 2, the second connection will be assigned twice as many concurrent users as the first.
If checked, this connection will only be used if all other connections in the group fail
If you are establishing a connect through a guacd service which is operating on a separate server (other than localhost), you would specify the proxy parameters here. In most default installations, this section is not needed and should be left empty. For more information see the guacd documentation.
Hostname and port of the proxy
Choose if the connection traffic should be encrypted. You can choose unencrypted or TLS/SSL encryption.
Details to facilitate the new RDP connection. Set network and authentication details.
Enter the hostname and port of the RDP connection
Enter the following connection fields for you RDP connection:
Username
Password
Domain
Select the security mode to use, the supported modes are:
Any
NLA (Network Level Authentication)
RDP Encryption
TLS Encryption
Hyper-V / VMConnect
Choose to turn off authentication for this RDP connection
Choose to ignore the server certificate. In most cases, this is required to establish a connection.
Fill in the following details about the remote desktop gateway:
Hostname and Port
Username
Password
Domain
Start a program on connection. Enter the location of the program to run
Set a name for the computer this connection is connecting to
Choose the type of keyboard to use with this RDP connection
Use the dropdown menus to select the timezone to use with this connection
Choose to allow multi-touch input for this RDP connection
Choose to allow access to the Administrator Console for users connecting to this RDP connection
Choose settings that affect how the new connection will look.
Choose the dimensions and resolution of the screen in pixels (pixels per inch for resolution).
Choose the color depth of the screen over the RDP connection.
Use lossless compression. Check this option for better visual quality, but it may impact performance.
Choose what the connection should do if the window is resized. Keeper Connection Manager supports "Display Update" Visual channel for RDP 8.1 or higher. For older versions of RDP, use the reconnect method.
If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
Choose options for connected devices
Choose if audio is supported within the console
Choose if audio from the connection should be disabled
Choose if the user's microphone can be used within the connection
Choose if users can print from the connection
If allowing printing, choose the name of the printer to use
If you would like to transfer files to this target with Drag and Drop, select this option. Along with this, make sure to fill out a "Drive Name", "Drive Path", and select "Automatically Create Drive".
If file transfer is enabled, the name of the drive to use. For example "My Drive".
Choose if files can be downloaded to the connected drive
The path of the drive to use if enabled. A typical default Drive Path would be something like /var/lib/guacamole/drives/${GUAC_USERNAME}
If selected, Keeper Connection Manager will automatically create a drive to use with the connection
A comma-separated list of static channel names to open and expose as pipes. If you wish to communicate between an application running on the remote desktop and JavaScript, this is the best way to do it. KCM will open an outbound pipe with the name of the static channel. If JavaScript needs to communicate back in the other direction, it should respond by opening another pipe with the same name. KCM allows any number of static channels to be opened, but protocol restrictions of RDP limit the size of each channel name to 7 characters.
These options can be used to optimize the performance of the Windows Remote Desktop Connection.
Choose to enable or disable the following optional Windows features:
Enable Wallpaper
Enable Theming
Enable Font Smoothing (ClearType)
Enable Full-window Drag
Enable Desktop Composition (Aero)
Enable Menu Animations
Disable Bitmap Caching
Disable Off-screen Caching
Disable Glyph Caching
Recent versions of Windows provide a feature called RemoteApp which allows individual applications to be used over RDP, without providing access to the full desktop environment. If your RDP server has this feature enabled and configured, you can configure KCM connections to use those individual applications.
Specifies the RemoteApp to start on the remote desktop. If supported by your remote desktop server, this application, and only this application, will be visible to the user.
Windows requires a special notation for the names of remote applications. The names of remote applications must be prefixed with two vertical bars. For example, if you have created a remote application on your server for notepad.exe
and have assigned it the name “notepad”, you would set this parameter to: “||notepad
”.
The working directory, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
The command-line arguments, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
Keeper Connection Manager can use load balancing among connections in a group to give multiple concurrent users the best experience.
Enter a number to use as a multiplier of connection assignment. For example, if one connection in a group has a weight of 1, and another has a weight of 2, the second connection will be assigned twice as many concurrent users as the first.
If checked, this connection will only be used if all other connections in the group fail
Options for recording of the screen. See the Session Recording section for more information.
Enter the path to save the session recording. We recommend using the below value:
${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
Choose to exclude and touch events the user made from the recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options for file transfers to the connection using SFTP. For more information see the File Transfer section.
Choose to enable SFTP file transfers
If enabled, enter the following information to connect to and authenticate connection to your SFTP server:
Hostname Port
Public Host Key (Base64)
Username and Password
Private Key
Passphrase for the private key if applicable
The root directory of the SFTP server to display within this connection
If users upload a file from the connection, the directory that the file will go to by default
Enter the keepalive interval as a number
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new SSH connection. Set network and authentication details.
Enter the hostname and port for the SSH connection
Enter the Public Key for this SSH connection in Base64 format
The username and password (if required) for this SSH connection.
The private key used for connecting to this SSH connection
The passphrase (if any) for the private key
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a custom theme option.
Enter the name of a font for the terminal to use
Select the pixel size of the font
Select how far back a user can scroll through past commands. Leave blank for unlimited.
If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
Settings for basic environment setup
Enter a command to execute on connection start
Set the language/local for the connection, this sets the $LANG environment variable
Set the time zone for the connection. This sets the $TZ environment variable
Set an interval for a keepalive signal
The Terminal Behavior section contains options about the terminal for applicable connections.
Choose what action is sent when you click the backspace key. The options are:
Delete
Backspace
Choose the type of terminal to use. The options are:
ansi
linux
vt100
vt220
vterm
vterm-256color
Options for recording of the screen. See the Session Recording section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options for file transfers to the connection using SFTP. For more information see the File Transfer section.
Choose to enable SFTP file transfers
The root directory of the SFTP server to display within this connection
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new VNC connection. Set network and authentication details.
Hostname and port information for the VNC connection
Choose encryption method for connection traffic. The options are:
No Encryption
TLS/SSL Encryption
Login credentials for the VNC connection. If you would like to prompt users for the password, leave this field empty.
Choose settings that affect how the new connection will look.
If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.
Choose if the red and blue channels should be swapped for this connection.
Choose to use the cursor of the local machine, or of the remote machine.
Choose the color depth of the screen over the VNC connection.
Use lossless compression. Check this option for better visual quality, but it may impact performance.
Choose which encoding to use when copying and pasting. The options are:
CP1252
ISO 8859-1
UTF-16
UTF-8
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
There exist VNC repeaters, such as UltraVNC Repeater, which act as intermediaries or proxies, providing a single logical VNC connection which is then routed to another VNC server elsewhere. Additional parameters are required to select which VNC host behind the repeater will receive the connection.
Set the host and port to use
Options for recording of the screen. See the Session Recording section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options for file transfers to the connection using SFTP. For more information see the File Transfer section.
Choose to enable SFTP file transfers
If enabled, enter the following information to connect to and authenticate connection to your SFTP server:
Hostname Port
Public Host Key (Base64)
Username and Password
Private Key
Passphrase for the private key if applicable
The root directory of the SFTP server to display within this connection
If users upload a file from the connection, the directory that the file will go to by default
Enter the keepalive interval as a number
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection
Choose to enable audio for the connection
Name of the audio server to use
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new Telnet connection. Set network and authentication details.
Hostname and port information for the Telnet connection.
Authentication credentials for the Telnet connection. To prompt users for the password, leave this field empty.
The regular expression to use when waiting for the username prompt. This parameter is optional. If not specified, a reasonable default built into KCM will be used. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep).
The regular expression to use when waiting for the password prompt. This parameter is optional. If not specified, a reasonable default built into KCM will be used. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep).
The regular expression to use when detecting that the login attempt has succeeded. This parameter is optional. If specified, the terminal display will not be shown to the user until text matching this regular expression has been received from the telnet server. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep
).
The regular expression to use when detecting that the login attempt has failed. This parameter is optional. If specified, the connection will be closed with an explicit login failure error if text matching this regular expression has been received from the telnet server. The regular expression must be written in the POSIX ERE dialect (the dialect typically used by egrep
).
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a custom theme option.
Enter the name of a font for the terminal to use
Select the pixel size of the font
Select how far back a user can scroll through past commands. Leave blank for unlimited.
If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
The Terminal Behavior section contains options about the terminal for applicable connections.
Choose what action is sent when you click the backspace key. The options are:
Delete
Backspace
Choose the type of terminal to use. The options are:
ansi
linux
vt100
vt220
vterm
vterm-256color
Options for text recording. See the Session Recording section for more details about session recording.
Enter a file path location to save text session recordings to.
Enter a name for the text session recording file
Have Keeper Connection Manager automatically create the path location for the text session recording
Options for recording of the screen. See the Session Recording section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file
Choose to exclude graphics or streams from the recording
Choose to exclude the mouse from the screen recording
If selected, include key events that would not otherwise be visible in the recording
If selected, Keeper Connection Manager will automatically create a path for the recording file
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager
Identify the device to send the signal to by Mac Address
Where to send the WoL signal
How long to wait for the device to wake
Details to facilitate the new connection. Set network and authentication details.
The hostname and port of the Kubernetes connection
Choose to use SSL/TLS encryption
Choose to ignore the server certificate
Paste the Certificate Authority Certificate into this text box
Fill in the following information about the Kubernetes container:
Namespace
Pod Name
Container Name
The certificate to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.
The key to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a custom theme option.
Enter the name of a font for the terminal to use
Select the pixel size of the font
Select how far back a user can scroll through past commands. Leave blank for unlimited.
If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.
The Terminal Behavior section contains options about the terminal for applicable connections.
Choose what action is sent when you click the backspace key. The options are:
Delete
Backspace
Options for text recording. See the Session Recording section for more details about session recording.
Enter a file path location to save text session recordings to. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter a name for the session recording file.
Choose to exclude graphics and streams that may appear on the terminal from the recording.
Choose to include keys that are clicked in the session recording. Events like ctrl+c
will be recorded.
Have Keeper Connection Manager automatically create the path location for the session recording
Details to facilitate the new MySQL connection. Set network and authentication details.
Enter the hostname and port for the MySQL connection
Unix Socket
Enter the socket name if a host is not present
The username and password for this MySQL connection. To prompt users for the password, leave this field empty.
Default Database
Specify the default database schema when establishing a connection.
Disable CSV Export
Disable the ability for users to export data through "select .. into local infile"
Disable CSV Import
Disable the ability for users to import data through "load data local infile..."
Choose settings that affect how the new connection will look.
Select a color theme for the terminal.
There are built in themes, and a custom theme option.
Enter the name of a font for the terminal to use.
Select the pixel size of the font.
Select how far back a user can scroll through past commands. Leave blank for unlimited.
If checked, the connection will not allow for any interaction from the user. The user will be able to view what is happening on the connected device, but make no interactions with it.
If selected, users will not be able to copy from the connection
If selected, users will not be able to paste values into the connection
Settings for basic environment setup
Set the language/local for the connection, this sets the $LANG environment variable
Set the time zone for the connection. This sets the $TZ environment variable
Set an interval for a keepalive signal
Options for recording of the screen. See the Session Recording section for more information.
Enter the path to save the session recording. We recommend setting this to ${HISTORY_PATH}/${HISTORY_UUID}
Enter the name of the recording file.
Choose to exclude graphics or streams from the recording.
Choose to exclude the mouse from the screen recording.
If selected, include key events that would not otherwise be visible in the recording.
If selected, Keeper Connection Manager will automatically create a path for the recording file.
Options for file transfers to the connection using SFTP. For more information see the File Transfer section.
Choose to enable SFTP file transfers.
The root directory of the SFTP server to display within this connection.
If SFTP is enabled, check this option to exclude users from downloading files from the server to this connection.
If SFTP is enabled, check this option to exclude users from uploading files to the server from this connection.
Options to facilitate waking the connected device upon connection if supported.
Enable Wake-on-Lan and send a signal from Keeper Connection Manager.
Identify the device to send the signal to by Mac Address.
Where to send the WoL signal.
How long to wait for the device to wake.
Terminal based protocols (Kubernetes, SSH, MySQL and Telnet) allow for custom color themes. To use a custom theme first select "custom" from the Theme dropdown, this will open the custom theme builder.
To use the custom theme builder, click each color to select a new color to use in its place. The foreground and background colors are labeled, other colors represent the standard terminal colors.
For example: to replace all red highlighted text in the terminal with orange text, click the red color and choose orange in the color picker.
If you are editing an existing connection, the usage history of the connection is shown in this section
The usage history table displays the username, date, duration of connection and remote IP address of users connecting to this connection.
If you would like to establish a connection to a target server with restricted Ingres connections, check out the documentation on Creating Connections via reverse SSH tunnel.
Keeper Connection Manager user guide - launching connections
A connection can be launched by either clicking "Launch" or clicking on item from the list.
When you launch a connection, you will be instantly connected to the remote display from your web browser. You can interact with this display as if your mouse and keyboard are connected directly to the remote machine.
The remote display will take up the entire browser window, with no buttons or menus to disturb the view. With the intent of providing a seamless experience, options specific to remote desktop are hidden within the Keeper Connection Manager menu, which can be opened as needed.
The Keeper Connection Manager sidebar menu provides many features that you can use during your remote session.
To show or hide the menu, use the keystrokes below:
On Windows or Linux: Use Ctrl+Alt+Shift
On Mac: Use Ctrl+Option+Shift
If you are using a mobile or touchscreen device that lacks a keyboard, you can also show the menu by swiping right from the left edge of the screen.
The Keeper Connection Manager menu provides many features including:
Reading to and from the clipboard on the remote device
Switching between connections and joining multiple connections
Navigating back to the Home Screen
Disconnecting from the current connection
Sharing the current connection (if external sharing is configured)
Changing keyboard input method
Zooming in and out of the remote display
Selecting alternative mouse emulation methods
At the top of the Keeper Connection Manager menu is a text area labeled “Clipboard” along with some basic instructions:
Text copied/cut within Keeper Connection Manager will appear here. Changes to the text below will affect the remote clipboard.
The text area functions as an interface between the remote clipboard and the local clipboard. Text from the local clipboard can be pasted into the text area, causing that text to be sent to the clipboard of the remote desktop. Similarly, if you copy or cut text within the remote desktop, you will see that text within the text area, and can manually copy it into the local clipboard if desired.
If you have access to more than one connection, clicking the current connection name at the top of the Keeper Connection Manager menu will open a drop-down menu containing a list of your other available connections. Clicking on the name of another connection in this drop-down menu will immediately switch to that connection.
The previous connection will remain running as a thumbnail within a panel attached to the lower-right corner of the screen. This panel updates in real-time and remains visible as long as you have multiple active connections, even if you navigate away to another part of the Keeper Connection Manager application:
Clicking on any connection within the panel will navigate back to that connection, while clicking the “X” icon in the upper-right corner of the connection thumbnail will immediately close the connection.
Multiple connections may also be opened simultaneously within the same view by clicking the checkboxes next to the names of those connections in the connection menu. All connections opened in this way are automatically arranged in equally-sized tiles to fill the available area.
With multiple connections displayed as tiles, keyboard interaction and the Keeper Connection Manager menu will only affect the currently focused connection, as indicated by the blue title and border. Clicking or tapping within another connection will change the focus and allow keyboard interaction with that connection.
By holding down Ctrl (to select an individual connection) or Shift (to select a rectangle of connections), multiple connection may be focused at the same time. While multiple connections are focused, each key pressed will be broadcast across each focused connection:
This is particularly useful for running the same series of commands on multiple computers. Further, since Keeper Connection Manager automatically translates between the user’s local keyboard layout and the keyboard layout of the remote server, this will work as expected even if the keyboard layouts of focused connections do not match.
When you are done using the current connection, or you wish to navigate elsewhere temporarily, options to do so are within the user menu inside the Keeper Connection Manager menu:
The user menu within the Keeper Connection Manager menu provides an additional “Disconnect” option that allows you to explicitly close the current connection only. Clicking “Logout” will also implicitly disconnect all active connections, including the current connection.
Navigating back to the home screen or to the settings screen will not disconnect you: your connection will continue running in the background while you change settings or initiate another connection, and you can resume any active connection by clicking on it within the home screen.
You can transfer files back and forth between your local computer and the remote desktop if it is supported by the underlying protocol and enabled on the connection. Currently, Keeper Connection Manager supports file transfer for VNC, RDP, and SSH, using either the native file transfer support of the protocol or SFTP.
Files can be transferred to the remote computer by dragging and dropping the files into your browser window, or through using the file browser located in the Keeper Connection Manager menu.
While transferring files, a dialog on the lower right will display the status.
If file transfer is enabled on the connection, you will see one or more filesystem devices listed within the Keeper Connection Manager menu. Clicking on one of the filesystems opens a file browser which lists the files and directories within that filesystem.
Double-clicking on any directory will change the current location of the file browser to that directory, updating the list of files shown as well as the “breadcrumbs” at the top of the file browser. Clicking on any of the directory names listed in the breadcrumbs will bring you back to that directory, and clicking on the drive icon on the far left will bring you all the way back to the root level.
Downloads are initiated by double-clicking on any file shown, while uploads are initiated by clicking the “Upload Files” button. Clicking “Upload Files” will open a file browsing dialog where you can choose one or more files from your local computer, ultimately uploading the selected files to the directory currently displayed within the file browser.
The state of all file uploads can be observed within the notification dialog that appears once an upload begins, and can be cleared once completed by clicking the “Clear” button. Downloads are tracked through your browser’s own download notification system.
When you are done browsing the filesystem and transferring files, click “Back” to return to the Keeper Connection Manager menu.
RDP provides its own native support for file transfer called “drive redirection” or “RDPDR”. Keeper Connection Manager provides support for this mechanism by emulating a virtual drive. Typically, this virtual drive will appear as a network drive within the RDP session. Files uploaded and downloaded will be preserved within this drive, even after disconnecting.
Files can be downloaded from this drive using the file browser in the Keeper Connection Manager menu or using the special “Download” folder within the virtual drive. All files dropped into this folder will automatically begin uploading to the client, and thus downloading through the browser.
In addition to using the traditional drag-and-drop and the file browser, Keeper Connection Manager SSH support can be used with the guacctl utility. The guacctl utility is a simple shell script included with Guacamole (and supported by Keeper Connection Manager) which allows you to use and configure file transfer directly from the command line within the SSH session:
$ guacctl
guacctl 0.8.0, Guacamole SSH session control utility.
Usage: guacctl [OPTION] [FILE]...
-d, --download download each of the files listed.
-s, --set-directory set the destination directory for future uploaded
files.
$ guacctl -d FILENAME
$ guacctl -s DIRECTORY
$
For convenience, you may also create a symbolic link or alias to guacctl called guacget. When run as guacget, the utility behaves as if the --download
option were supplied and initiates a download for each file specified on the command line.
Certain key combinations are impossible to press within a web application like Keeper Connection Manager because they are reserved by the operating system (Ctrl+Alt+Del or Alt+Tab, for example) or by the web browser. If you press one of these reserved combinations, the effect will be observed locally, not remotely, and the remote desktop will receive only some of the keys.
Keeper Connection Manager provides its own, built-in on-screen keyboard which allows keys to be sent to the remote desktop without affecting the local system. If the device you’re using does not have certain keys which the remote desktop depends on, such as the arrow keys or Ctrl, you can use the on-screen keyboard for this, too. You can show the on-screen keyboard by selecting the “On-screen keyboard” option from the menu.
Clicking (or tapping) the buttons of the on-screen keyboard has the same effect as pressing the same buttons on a real keyboard, except that the operating system and browser will not intercept these keypresses; they will only be sent to the remote desktop.
Keeper Connection Manager will default to shrinking or expanding the remote display to fit the browser window exactly, but this is not necessarily ideal. If the remote display is much larger than your local display, the screen may be impossible to see or interact with. This is especially true for mobile phones, whose screens need to be small enough to fit in the average hand.
You can scale the display on touch devices by using the familiar pinch gesture. Place two fingers on the screen and bring them closer together to zoom out or further apart to zoom in.
If your device lacks a touch screen, you can also control the zoom level through the menu. The controls for zooming in and out are located at the bottom of the menu. The current zoom level is displayed between two “-” and “+” buttons which control the zoom level in 10% increments.
Keeper Connection Manager is designed to work equally well across all HTML5 browsers, including those of mobile devices. It will automatically handle input from a touch screen or a traditional mouse (or both, if you happen to have such a gifted computer), and provides alternative input methods for devices which lack a physical keyboard.
In the case that your device has a touchscreen and lacks a mouse, Keeper Connection Manager will emulate a mouse for the sake of interacting with remote desktops that expect mouse input. By default, Keeper Connection Manager uses “absolute” mouse emulation. This means that the mouse pointer is positioned at the location of each tap on the screen.
In both absolute and relative modes, you can click-and-drag by tapping the screen and then quickly placing your finger back down. This gesture only causes the mouse button to press down, but does not release it again until you lift your finger back up.
Absolute mode (touchscreen)
Absolute mouse emulation is the default as it tends to be what people expect when using a touch device to interact with applications designed for mouse input.
Each tap on the screen is translated into a left-click at that position. Right-clicking is accomplished through pressing and holding your finger on the screen. If parts of the remote display are off-screen, you can drag your finger around the screen to pan the off-screen parts back into view.
Although absolute mouse emulation works generally well, a finger makes for a very inaccurate pointing device. To address this, Keeper Connection Manager also provides “relative” mouse emulation. Relative mouse emulation provides a way to deal with the need for accurate pointer control, when a true pointer device is not present.
Relative mode (touchpad)
Keeper Connection Manager's relative mouse emulation behaves similarly to the touchpad present on most modern laptops. You drag your finger across the display to move the mouse pointer, and tap the display to left-click. The pointer moves relative to the motion of your finger. Right-clicking is accomplished with a two-finger tap, and middle-clicking with a three-finger tap. The mouse scroll wheel can be operated by dragging two fingers up or down.
Because the relative mouse emulation reserves so many gestures for the different mouse buttons and actions, common touch gestures like panning and pinch-to-zoom will not work while relative mouse emulation is enabled. Instead, the screen will automatically pan to keep the mouse pointer in view, and you can zoom through the buttons in the menu.
Many mobile devices lack a physical keyboard entirely, and instead provide their own on-screen keyboards. As these are not true keyboards per se and do not produce key presses, Keeper Connection Manager's text input mode is required for typing on these platforms.
“Text input” allows input of keystrokes based on the input of text. Choosing “Text input” tells Keeper Connection Manager to infer keystrokes by tracking text entered, rather than relying on actual key presses. Keeper Connection Manager will instead determine the combination of keypresses necessary to produce the same pattern of input, including deletions.
If you wish to type via an IME (input method editor), such as those required for Chinese, Japanese, or Korean, text input mode is required for this as well. Such IMEs function through the explicit insertion of text and do not send traditional key presses. Using text input mode within Keeper Connection Manager thus allows you to use a locally-installed IME, without requiring the IME to be installed on the remote desktop.
User preferences can be changed within the settings screen under the "Preferences" tab. These preferences are stored locally within the browser, so if you use multiple computers to access Keeper Connection Manager, you can have different settings for each location. The settings screen allows users to change the language of the Keeper Connection Manager interface, to change the default input method used by Keeper Connection Manager connections, and to change the default mouse emulation mode for if a touch device is used. If you have sufficient permissions, you may also change your password, or administer the system.
The Keeper Connection Manager interface is currently available in English, Dutch, French, German, Italian, and Russian. By default, Keeper Connection Manager will attempt to determine the appropriate display language by checking the language preferences of the browser in use. If this fails, or the browser is using a language not yet available within Keeper Connection Manager, English will be used as a fallback.
If you wish to override the current display language, you can do so by selecting a different language within the “Display language” field. The change will take effect immediately.
System administrators can restrict the ability of individual users to change their own passwords, so this section may not always be available. If your account does have permission, the preferences screen will contain a “Change Password” section.
To change your password, you must provide your current password, enter the desired new password, and click “Update Password”. You will remain logged in, and the change will affect any future login attempt.
Keeper Connection Manager provides multiple keyboard input methods and multiple mouse emulation modes. Many of these settings are specifically useful for touch devices, while others are aimed mainly at traditional desktop use. By default, Keeper Connection Manager will use the keyboard and mouse modes most commonly preferred by users, but you can change these defaults if they do not fit your tastes or your current device.
The choices available mirror those within the Keeper Connection Manager menu discussed earlier in this chapter, and changing these settings will affect the default values selected within the Keeper Connection Manager menu of future connections.
To initiate a connection share, from within a connection session first open the connection menu using Ctrl+Shift+Win
(Ctrl+Shift+Cmd
for Mac). When at least one sharing profile exists for the connection, the "Sharing" menu will appear next to the user's name.
Click "Sharing" to see a list of the sharing profiles for this connection.
Select which profile to use and click it to create a sharing URL which can be shared to give anyone access to this connection session.
When someone without an account in this Keeper Connection Manager system connections to the session, they will have full access to the connection (unless "Read Only" was selected in the sharing profile settings) however they will not have a user menu, or sharing menu.
Transferring files between local and remote connection
Keeper Connection Manager support file transfers in both directions, with unique features available for the different connection types.
Files can be transferred between the local system and the remote connection through simple drag-and-drop.
Files can be transferred to the remote system through drag-and-drop. File transfer from remote system to local browser accomplished through helper script.
Files can be transferred via sftp to the remote system through drag-and-drop. The sftp endpoint is configured in the Connection Edit screen.
The new MySQL connection type supports transfer of CSV data into and out of the remote database through the browser interface using special "select" and "load" commands that have been built as extensions to the MySQL syntax.
The connection parameters used for File Transfer on Windows connections is displayed below. RDP connection types support two different methods of file transfer. The "Enable Drive" method uses the RDP protocol and maps file transfers to a mapped drive on the remote system.
Depending on the installation method, the "Drive Path" can be configured a few different ways.
On Docker Installation methods, there is a default volume mount to /var/lib/guacamole/
The Drive Path must include a base path of /var/lib/guacamole/drives
which has the necessary permissions to write files. If the same Drive Path is specified on multiple connections, the files will be shared among those connections. If the Drive Path contains a token after /drives/ such as ${GUAC_USERNAME}
, each user will see their own shared drive.
For example:
In this example, the following parameters are set:
Enable Drive: Check this to activate the file transfer capability
Drive Path: Set this path according to the environment. The folder must be writable by the guacd user.
Automatically Create Drive: If the permissions allow, the subfolders will be created on demand.
The mapped drive will show up on the remote system as seen below:
Windows connections can optionally use SFTP for file transfer. This can be activated in the SFTP section of the connection.
To transfer a file from the local system to the remote connection, simply drag-and-drop the file into the window. A progress indicator will show up on the lower right.
After the file transfer is complete, it will appear in the Drive folder.
To transfer a file from the remote system to the local computer, simply drag and drop a file on the remote system into the mapped Drive and then drag into the "Download" folder of the mapped drive. The file will instantly download to the local system.
SSH Connection types provide SFTP file transfer, which conveniently allows you to drag and drop a file into the SSH connection screen. Files are transferred to the designated folder as specified in the SSH connection settings.
Simply drag and drop a file into the SSH connection to transfer a file to the remote system. By default, the files will transfer to the home folder unless a different root directory path is specified.
To transfer files from the SSH remote connection to the local filesystem, you can download a tool called guacctl
into the remote system and use it for performing outbound transfers.
Instructions for using guacctl
are below:
wget https://raw.githubusercontent.com/apache/guacamole-server/master/bin/guacctl
chmod +x guacctl
./guacctl -d <filename>
Importing Data is accomplished through the web browser interface by using the standard "LOAD DATA LOCAL INFILE" SQL command. Keeper Connection Manager intercepts the response data and redirects it through the native file download facility of the web browser.
For example:
LOAD DATA LOCAL INFILE "input.csv"
INTO TABLE products
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
IGNORE 1 LINES
This SQL query will trigger a browser file upload and then import the provided data.
Details about the syntax can be found at the MySQL website.
Exporting CSV data from SQL query using a new SELECT... INTO LOCAL OUTFILE
command.
For example:
SELECT * FROM products INTO LOCAL OUTFILE "products.csv";
The file upload limit is controlled through the client_max_body_size
setting in the NGINX configuration file.
On Docker installations of Keeper Connection Manager, the default value of this setting is "0" which allows for an unlimited upload file size.
On Advanced Linux Installation method, the default file transfer limit might be set to 1MB and most likely, you will want to raise this limit. If you followed the typical installation instructions with NGINX, you should modify the configuration file, e.g. /etc/nginx/conf.d/guacamole.conf
Ensure the following parameter (client_max_body_size) is set with the preferred maximum file size limit. For example the below is set for 200MB size limit:
client_max_body_size 200m;
After updating this value, make sure to restart NGINX
systemctl restart nginx
If you have an environment where you would like the file location path associated with an existing network drive, follow the steps below:
Mount your network drive to the Keeper Connection Manager host filesystem
Volume mount the network drive path in the Docker Compose for the guacd container
Ensure that the guacd user can write the files in the docker container
The most important thing to keep in mind when doing this is that it's the "guacd" service that needs to be able to write files in the drive path. The guacd service operates as a reduced-privilege "guacd" user within the "guacd" container, and so you will need to set file permissions accordingly. This can be done either by modifying the files on the filesystem to have appropriate ownerships using the numerical UID/GID used by the container, or by using the GUACD_UID and GUACD_GID environment variables to configure the container to use the UID/GID already used by the files on the guacd container filesystem.
Created shared remote connections in Keeper Connection Manager
Keeper Connection Manager allows users to share access to their connection session with a URL. This allows for easy sharing of a connection session among teams, or sharing of connections to people without Keeper Connection Manager accounts.
The first step to connection sharing is to create a Sharing Profile. This needs to be made for each connection that will be shared.
To create a sharing profile, head to the "Connection" tab of the Settings menu and click the arrow next to the connection you would like to add a sharing profile to.
You will see a list of all the sharing profiles created for this connection, click "New Sharing Profile" to create a new profile, or click an existing sharing profile to edit it.
The Sharing Profile form will open. Fill in the name and options to configure the sharing profile.
Click "Save" to create the sharing profile.
To initiate a connection share, from within a connection session first open the connection menu using Ctrl+Shift+Win
(Ctrl+Shift+Cmd
for Mac). When at least one sharing profile exists for the connection, the "Sharing" menu will appear next to the user's name.
Click "Sharing" to see a list of the sharing profiles for this connection.
Select which profile to use and click it to create a sharing URL which can be shared to give anyone access to this connection session.
When someone without an account in this Keeper Connection Manager system connections to the session, they will have full access to the connection (unless "Read Only" was selected in the sharing profile settings) however they will not have a user menu, or sharing menu.
Configure and view connection session recordings
Keeper Connection Manager supports automatic screen recording of each connection session. Recordings can be graphical video recordings of the connection, or (for certain connection protocols) typescript recordings which record only the text sent to the the client machine.
Read below about how to setup, configure, and view each session recording type.
Sessions of all supported protocols can be recorded graphically. These recordings take the form of Guacamole protocol dumps and are recorded automatically to a specified directory.
The simplest way to record user connection sessions and view them in the browser.
To configure connections for in-browser recording playback, enter the following special values in the "Screen Recording" section of the connection settings.
Recording Path
${HISTORY_PATH}/${HISTORY_UUID}
[x] Automatically Create Typescript Path
Typescript Path
${HISTORY_PATH}/${HISTORY_UUID}
[x] Automatically Create Recording Path
These values tell the system to store recordings in a location and format that the in-browser viewer can consume. A screenshot example is below:
If desired, graphical session recordings can be named with custom values, or saved to any desired location. This will require recording playback using the Glyptodon Session Recording Player.
The directory in which screen recording files should be created.
This parameter is required for graphical session recording to function.
The filename to use for any created recordings. This parameter is optional. If omitted, the value “recording” will be used instead.
This parameter only has an effect if graphical recording is enabled. If the "Recording Path" is not specified, graphical session recording will be disabled, and this parameter will be ignored.
It is recommended to utilize Keeper Connection Manager's dynamic credential pass-through to add the date, time, and other unique information to the recording name.
For example:
RDP Recording ${GUAC_USERNAME} - ${GUAC_DATE} : ${GUAC_TIME}
Will create recording files with the user's username, the session date and time in the name.
Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like “.1”, “.2”, “.3”, etc. will be appended to to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will simply not be recorded.
Keeper Connection Manager session recordings can be viewed from within the user interface in the History tab of the settings screen. To view a recording, click the play icon on the far right. Any session of a connection that was setup with the settings above will have the icon. When the icon is clicked, the recorded session will load in the browser, and you can start playback by clicking anywhere on the screen.
If checked, graphical output and other data normally streamed from server to client will be excluded from the recording, producing a recording which contains only user input events.
This parameter is optional. If omitted, graphical output will be included in the recording.
If checked, user mouse events will be excluded from the recording, producing a recording which lacks a visible mouse cursor.
This parameter is optional. If omitted, mouse events will be included in the recording.
If checked, user key events will be included in the recording.
This parameter is optional. If omitted, key events will be not included in the recording.
If checked the directory specified by "Recording Path" will automatically be created if it does not yet exist. Only the final directory in the path will be created - if other directories earlier in the path do not exist, automatic creation will fail, and an error will be logged.
This parameter is optional. By default, the directory specified by the recording path parameter will not automatically be created, and attempts to create recordings within a non-existent directory will be logged as errors.
Keeper Connection Manager graphical session recordings that were saved to a custom location can be viewed using the Keeper Connection Manager Session Recording Player at https://player.glyptodon.com
To view session recordings, click "Browse..." and select the recording in your file system. The recording will play in the browser.
The Keeper Connection Manager graphical session recording player does not send recordings over the internet. Recording files are translated to video locally on the browser.
The full, raw text content of terminal sessions, including timing information, can be recorded automatically to a specified directory. This recording, also known as a “typescript”, will be written to two files within the directory specified by the entered Typescript Path: NAME
, which contains the raw text data, and NAME
.timing
, which contains timing information, where NAME
is the value provided for Typescript Name.
This format is compatible with the format used by the standard UNIX script command, and can be replayed using compatible tools.
Typescript session recording can be configured for each connection in the Keeper Connection Manager connection settings
The directory in which typescript files should be created.
This parameter is required. Specifying this parameter enables typescript recording. If this parameter is omitted, no typescript will be recorded.
The base filename to use when determining the names for the data and timing files of the typescript.
This parameter is optional. If omitted, the value “typescript” will be used instead.
Each typescript consists of two files which are created within the directory specified by the Typescript Name: NAME
, which contains the raw text data, and NAME
.timing
, which contains timing information, where NAME
is the value provided for the Typescript Name parameter.
It is recommended to utilize Keeper Connection Manager's dynamic credential pass-through to add the date, time, and other unique information to the recording name.
For example:
SSH Typescript ${GUAC_USERNAME} - ${GUAC_DATE} : ${GUAC_TIME}
Will create recording files with the user's username, the session date and time in the name.
Guacamole will never overwrite an existing recording. If necessary, a numeric suffix like “.1”, “.2”, “.3”, etc. will be appended to NAME
to avoid overwriting an existing recording. If even appending a numeric suffix does not help, the session will simply not be recorded.
If checked, the directory specified by "Typescript Path" will automatically be created if it does not yet exist. Only the final directory in the path will be created - if other directories earlier in the path do not exist, automatic creation will fail, and an error will be logged.
This parameter is optional. By default, the directory specified by "Typescript Path" will not automatically be created, and attempts to record typescripts in a non-existent directory will be logged as errors.
Recordings can be replayed using script. For example, to replay a typescript called “NAME
”, you would run:
$ script -p NAME
Recordings can be replayed using scriptreplay. For example, to replay a typescript called “NAME
”, you would run:
$ scriptreplay NAME.timing NAME
Discover and connect to EC2 instances
Keeper Connection Manager integrates with Amazon AWS to perform automatic discovery and connection to EC2 instances. This makes it fast and easy to connect to any EC2 instance in your cloud environment without having to manually configure anything. Like other connections, the EC2 instance connections are privileged, which means that the end-user does not have access to the underlying credentials.
Once activated, the EC2 instances will appear on the home screen of Keeper Connection Manager as seen below.
Instant discovery of EC2 instances in your AWS environment
Restrict permissions to a defined User Group
PEM files can be managed either on the filesystem or Keeper Vault
In order to integrate Keeper Connection Manager with Amazon AWS, you'll need to create a user and assign a role policy that has permission to read instance information. A sample policy with minimal permissions is below:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:DescribeImages",
"ec2:GetPasswordData",
"ec2:DescribeInstances",
"ec2:DescribeInstanceStatus"
],
"Resource": "*"
}
]
}
Assign the permission to a user and then create access keys.
Before configuring the environment, ensure that you have a Group called "AWS EC2 Administrators" that are assigned to the users who will have access to discovered instances. The group name can also be customized through the AWS_DISCOVERY_ADMIN_GROUP environmental variable.
If you have installed Keeper Connection Manager using the Advanced Linux Install method, follow the steps below to activate the AWS EC2 discovery feature.
(1) Install the KCM Cloud Connector package
If you are using the Advanced Linux Install method, you can use yum install to install the KCM Cloud Connector package:
sudo yum install kcm-cloud-connector-aws
(2) Edit the Guacamole Properties File
Edit /etc/guacamole/guacamole.properties
to include the mandatory and optional properties for the AWS Cloud Connector feature.
Available Properties
aws-discovery-access-key-id
The access key ID for the AWS account that should be used to authenticate with AWS (Required).
aws-discovery-secret-key
The secret key associated with the access key (Required).
aws-discovery-regions
Comma-separated list of regions to query for EC2 instances, such as us-west-1,us-east-1
(Required).
aws-discovery-instance-base-path
The name of the organizational connection group that should be used to house the EC2 instances for convenience. By default, this will be “Amazon EC2“ (Optional).
aws-discovery-admin-group
The name of the User Group in Keeper Connection Manager to require for any user to see the discovered EC2 instances. By default, this will be a group called “AWS EC2 Administrators". This can also be assigned to a Group that has been provisioned from Azure AD or other directory integrations (Optional).
aws-discovery-record-connections-by-default
If this property is set to "true", screen recording will be enabled by default on all connections (Optional).
Connection session recording can also be set at an individual machine level using the "kcm:record
" EC2 instance tag, which can be set to "true" or "false" to explicitly enable or disable connection recording.
Add any required PEM files for private keys used to access Linux instances or decrypt Windows passwords to /etc/guacamole/cloud-connector-secrets/aws/
(4) Restart the Guacamole service
The new package will not take effect until the web application is restarted.
sudo systemctl restart guacamole
Connections can be configured using AWS EC2 tags assigned to each instance, in order to override and customize defaults and metadata.
kcm:username
The username that should be used when connecting to that instance.
This tag defines the login username for the instance, such as "centos" or "ec2-user". KCM attempts to select the correct username based on the AMI of the instance, but this can be used to correct a wrong assumption.
kcm:organize
The full path of the connection groups that should be used to organize the instance among other connections.
This tag Allows EC2 instances to be further organized beyond the connection group containing all instances. By default, all discovered instances will be placed within one top-level group of connections called "Amazon EC2", but will not be further organized. For example, if you set kcm:organize
to something like "Databases", that instance will be located within a "Databases" connection group beneath "Amazon EC2". If you set kcm:organize
to "Databases/MySQL", that instance will be within a "MySQL" connection group beneath "Databases", which itself would be beneath the main "Amazon EC2" group.
These connection groups do not need to already exist, and they actually exist only in memory (dynamically maintained by the EC2 support).
kcm:record
Flag to indicate if the instance connection sessions should be recorded.
This tag will override the default screen recording configuration of the KCM environment property aws-discovery-record-connections-by-default
. If this tag exists with the value "true", the connection will be recorded, if "false", the connection will not be recorded. If the tag does not exist, or is set to any other value, the configured default recording behavior will be used.
The key files must be named exactly as referenced in the EC2 console, e.g. MyServer
The key files must be named with a .pem file extension, for example MyServer.pem
The service in the "guacamole" docker container is run by the "guacamole" user. File permissions must be configured properly in the volume mount to ensure that the "guacamole" user has read access to the shared key files.
Example: On the host under /var/lib/guac_keys/
the files may be owned by ec2-user or whatever you have set up.
[root@xxx guac_keys]# ls -l
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoMac.pem
-rw------- 1 ec2-user ec2-user 1678 Jul 29 18:31 kcmdemo.pem
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoUbuntu.pem
-rw------- 1 ec2-user ec2-user 1674 Jul 29 18:30 KCMDemoWindows.pem
-rw------- 1 ec2-user ec2-user 1678 Jul 29 18:30 KCMKaliLinux.pem
In the container the files may show owned by "1000" or some other user ID.
[root@1dd8996db434 aws]# ls -l
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoMac.pem
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoUbuntu.pem
-rw------- 1 1000 1000 1674 Jul 29 18:30 KCMDemoWindows.pem
-rw------- 1 1000 1000 1678 Jul 29 18:30 KCMKaliLinux.pem
-rw------- 1 1000 1000 1678 Jul 29 18:31 kcmdemo.pem
There are two ways of solving the file permissions between the host and the guacamole container.
(1) You may use the environmental variables GUACAMOLE_UID and GUACAMOLE_GID in the guacamole docker definition to map the permission.
GUACAMOLE_UID: 1000
GUACAMOLE_GID: 1000
This change has the following result:
Updates the ownerships of existing files from the old UID of the guacamole
user to the specified value.
Updates the UID of the guacamole
user in the container to match that value.
(2) You can set wider group or world read permissions on the files from the host, but this is a decision based on your environment and security settings.
If the .pem key is encrypted with a passphrase, you will be prompted for this when establishing the connection to the target.
Dynamic pass-through tokens
The values of connection parameters can contain "tokens" which will be dynamically replaced by Keeper Connection Manager when used. These tokens allow the values of connection parameters to vary dynamically by the user using the connection, and provide a simple means of forwarding authentication information without storing that information in the connection configuration itself, so long as the remote desktop connection uses the same credentials as Keeper Connection Manager.
Common uses for these tokens include:
Automatically authenticating users with their remote desktops by passing through the credentials provided during login. This is typically useful when both Keeper Connection Manager and the remote desktops authenticate against the same, central authority, such as Active Directory or LDAP.
Providing remote desktops with the user's IP address or hostname, as may be required for licensing, auditing, or logging.
Automatically organizing session recordings using the current date and time.
Each token is of the form ${TOKEN_NAME}
, where TOKEN_NAME
is some descriptive name for the value the token represents. Tokens with no corresponding value will never be replaced, but should you need such text within your connection parameters, and wish to guarantee that this text will not be replaced with a token value, you can escape the token by adding an additional leading "$
", as in "$${TOKEN_NAME}
".
When a user authenticates with Keeper Connection Manager, the credentials that they used may be automatically passed through to their connections using the "${GUAC_USERNAME}
" and "${GUAC_PASSWORD}
" tokens. These may be specified within any connection parameters, including the parameters which specify the username and password to be used to connect to the remote desktop, thus allowing the administrator to explicitly define how and whether user credentials are passed through. Unless these tokens are specified by the administrator, no such pass-through will take place.
${GUAC_USERNAME}
The username provided by the current user when they successfully authenticated for their current Guacamole session.
${GUAC_PASSWORD}
The password provided by the current user when they successfully authenticated for their current Keeper session.
The hostname (if known) or IP address of the machine that the current Keeper user is connecting from may be included within connection parameters using the "${GUAC_CLIENT_HOSTNAME}
" and "${GUAC_CLIENT_ADDRESS}
" tokens respectively. Note that the client address may not be the true address of the user if they are connecting through one or more proxies, or if they are connecting through a VPN, and there may be no associated hostname for that address.
${GUAC_CLIENT_ADDRESS}
The IPv4 or IPv6 address of the current Guacamole user. This will be the address of the client side of the HTTP connection to the Guacamole server at the time the current user logged in.
${GUAC_CLIENT_HOSTNAME}
The hostname of the current logged-in user. This will be the hostname of the client side of the HTTP connection to the Guacamole server at the time the current user logged in. If no such hostname can be determined, the IPv4 or IPv6 address will be used instead, and this token will be equivalent to ${GUAC_CLIENT_ADDRESS}
.
Timestamps representing when the user started the connection may be included within connection parameters using the "${GUAC_DATE}
" and "${GUAC_TIME}
" tokens. Each of these tokens are replaced by values that consist only of digits. It is common to use these tokens within the parameter specifying the name of the session recording to be created, perhaps together with the "${GUAC_USERNAME}
" token, to allow recordings to be given reasonably unique names and to be organized automatically.
For example, if connection were configured to record sessions to files names "${GUAC_USERNAME}-${GUAC_DATE}-${GUAC_TIME}.guac
", and a user named "someuser
" connected to that connection on January 1st, 2020, at exactly midnight, the session recording created would be named "someuser-20200101-000000.guac
".
${GUAC_DATE}
The current date in the local time zone of the Guacamole server. This will be written in "YYYYMMDD" format, where "YYYY" is the year, "MM" is the month number, and "DD" is the day of the month, all zero-padded. When a user accesses a connection, this token will be dynamically replaced with the date that the connection began.
${GUAC_TIME}
The current time in the local time zone of the Guacamole server. This will be written in "HHMMSS" format, where "HH" is hours in 24-hour time, "MM" is minutes, and "SS" is seconds, all zero-padded. When a user accesses a connection, this token will be dynamically replaced with the time that the connection began.
Integrate Keeper Connection Manager with external data sources using Encrypted JSON Authentication
Keeper Connection Manager can be configured to integrate with any custom software or 3rd party application using encrypted JSON files that simultaneously authenticate a user and grant them access to remote connections. This provides a simple method of integration without substantial coding, and it's a great alternative to writing a full Guacamole extension.
The Dynamic Connections feature requires installation of the Encrypted JSON Authentication module for Keeper Connection Manager.
If you installed Keeper Connection Manager using the linux package installation method, the package kcm-guacamole-auth-json
needs to be installed. This package is an authentication extension for Apache Guacamole which authenticates users using JSON which has been signed using HMAC/SHA-256 and encrypted with AES-128 CBC. As this JSON contains all information describing the user being authenticated, including any connections they have access to, this extension can provide a simple means of integrating Keeper Connection Manager with external applications.
$ sudo yum install kcm-guacamole-auth-json
Configuring Guacamole to accept encrypted JSON
Guacamole’s main configuration file, /etc/guacamole/guacamole.properties
, must be modified to specify the secret key which the Guacamole server should use to decrypt and verify received JSON. Systems generating this JSON will also use this same key to encrypt and sign the JSON they generate.
$ sudo vi /etc/guacamole/guacamole.properties
As guacamole-auth-json uses 128-bit AES, this key must be 128 bits, specified as a 32-digit hexadecimal value using the json-secret-key
property:
##
## [JSON-1] Shared JSON secret key
##
## A shared secret key is used by systems generating JSON data to encrypt and
## sign the JSON, and by the Guacamole server to verify and decrypt received
## data. This key must be 128 bits, specified with 32 hexadecimal digits.
##
#json-secret-key: 4c0b569e4c96df157eee1b65dd0e4d41
This key can be essentially anything as long as it is unpredictable. An easy way of generating such a key is to echo a passphrase through the "md5sum" utility. This is the technique OpenSSL itself uses to generate 128-bit keys from passphrases. For example:
$ echo -n "ThisIsATest" | md5sum
4c0b569e4c96df157eee1b65dd0e4d41 -
If encrypted JSON will only ever be received from a known set of machines or private subnets, you may wish to further restrict acceptance of received JSON to only those trusted machines using the json-trusted-networks
property:
##
## [JSON-2] Source network restrictions
##
## By default, received encrypted JSON will be accepted as long as it is valid
## and properly signed with the secret key. This can be further restricted to
## accept encrypted JSON only from machines which match a comma-separated list
## of trusted IP addresses and/or CIDR subnets.
##
#json-trusted-networks: 127.0.0.0/8, 10.0.0.0/8
Guacamole will generally only load new extensions and reread guacamole.properties
during the startup process. To apply the configuration changes, Guacamole must be restarted:
$ sudo systemctl restart guacamole
The general format of the JSON (prior to being encrypted, signed, and sent to Guacamole), is as follows:
{
"username" : "arbitraryUsername",
"expires" : TIMESTAMP,
"connections" : {
"Connection Name" : {
"protocol" : "PROTOCOL",
"parameters" : {
"name1" : "value1",
"name2" : "value2",
...
}
},
...
}
}
where TIMESTAMP
is a standard UNIX epoch timestamp with millisecond resolution (the number of milliseconds since midnight of January 1, 1970 UTC) and PROTOCOL
is the internal name of any of Guacamole's supported protocols, such as vnc
, rdp
, or ssh
.
The JSON will cease to be accepted as valid after the server time passes the timestamp. If no timestamp is specified, the data will not expire. This can be desirable, but should only be done after careful consideration. In most cases, it is critical that a timestamp is specified, limiting the use of the encrypted JSON to some reasonable time interval and preventing replay attacks.
The top-level JSON object which must be submitted to Guacamole has the following properties:
username
string
The unique username of the user authenticated by the JSON. If the user is anonymous, this should be the empty string (""
).
expires
number
The absolute time after which the JSON should no longer be accepted, even if the signature is valid, as a standard UNIX epoch timestamp with millisecond resolution (the number of milliseconds since midnight of January 1, 1970 UTC).
connections
object
The set of connections which should be exposed to the user by their corresponding, unique names. If no connections will be exposed to the user, this can simply be an empty object ({}
).
Each connection defined within each submitted JSON object has the following properties:
protocol
string
The internal name of a supported protocol, such as vnc
, rdp
, or ssh
.
parameters
object
An object representing the connection parameter name/value pairs to apply to the connection, as documented in the Guacamole manual.
To authenticate a user with the above JSON format, the JSON must be both signed and encrypted using the same 128-bit secret key specified with the json-secret-key
within guacamole.properties
:
Generate JSON in the format described above
Sign the JSON using the secret key (the same 128-bit key stored within guacamole.properties
with the json-secret-key
property) with HMAC/SHA-256. Prepend the binary result of the signing process to the plaintext JSON that was signed.
Encrypt the result of (2) above using AES in CBC mode, with the initial vector (IV) set to all zero bytes.
Encode the encrypted result using base64.
POST the encrypted result to the /api/tokens
REST endpoint as the value of an HTTP parameter named data
(or include it in the URL of any Guacamole page as a query parameter named data
).
For example, if Guacamole is running on localhost at /guacamole
, and BASE64_RESULT
is the result of the above process, the equivalent run of the "curl" utility would be:
$ curl --data-urlencode "data=BASE64_RESULT" http://localhost:8080/guacamole/api/tokens
Be sure to URL-encode the base64-encoded result prior to POSTing it to /api/tokens
or including it in the URL. Base64 can contain both "+" and "=" characters, which have special meaning within URLs.
If the data is invalid in any way, if the signature does not match, if decryption or signature verification fails, or if the submitted data has expired, the REST service will return an invalid credentials error and fail without user-visible explanation. Details describing the error that occurred will be in the Tomcat logs via journalctl
.
The source includes a shell script, /opt/keeper/share/guacamole-auth-json/doc/encrypt-json.sh
, which uses the OpenSSL command-line utility to encrypt and sign JSON in the manner that guacamole-auth-json requires. It is thoroughly commented and should work well as a reference implementation, for testing, and as a point of comparison for development. The script is run as:
$ /opt/keeper/share/guacamole-auth-json/doc/encrypt-json.sh HEX_ENCRYPTION_KEY file-to-sign-and-encrypt.json
For example, if you have a file called auth.json
containing the following:
{
"username" : "test",
"expires" : "1446323765000",
"connections" : {
"My Connection" : {
"protocol" : "rdp",
"parameters" : {
"hostname" : "10.10.209.63",
"port" : "3389"
}
},
"My OTHER Connection" : {
"protocol" : "rdp",
"parameters" : {
"hostname" : "10.10.209.64",
"port" : "3389"
}
}
}
}
and you run:
$ /opt/keeper/share/guacamole-auth-json/doc/encrypt-json.sh 4C0B569E4C96DF157EEE1B65DD0E4D41 auth.json
You will receive the following output:
le2Ug6YIo4perD2GV17QtWvOdfSemVDDtCOdRYJlbdUf3fhN+63LpQa1RDkzU7Zc
DW3+OtyTCBGQ7OLO+HpG6pHNom76BXpmnHSRx1UdQ3WVZelPUXEDzxe74aN6DUP9
G9isXhBMdLUhZwEJf4k4Gpzt9MHAH5PufSKq3DO1UHnrRjdGbKKddug2BcuDrwJM
UJf1tRX9CAEC11/gWEwrHDOhH/abeyeDyElbaEG/oOY8EdoFNYgUsjI2x31OpCuB
sEv7FOFafL05wEoIFv0/pPft0DHk7GuvHBBCqXuK98yMEo3d0zD5D+IsOY8Rmm1+
0CoWkX22mqyRQMFS2fTp/fClCN4QLb0aNn+unweTimd2SXN9cjREmZknXf7Tj8oU
/FNXc37i0HEfG5aVgp5znMCwwRAOFnFhLqG3K2yaTRE+hLNBxltIjLfFmNG5TZZA
gUdKyuegsOd0KS5iHdW6tPI01AwfRO9y2z20t3flsgDp50EGWjT2/TTA5Nkjnnjk
JXNzCOfM7DCI/ioEz6Ga140qXfOX/g8SGiukpwt+j0ANI573TdVt7nsp7MZX2qKg
2GcoNqjBqQxqpqI5ZYz4KVfD4cYu8KDZ9MiFMzbUwwKNSzYxiep1KJwiG0HQThHg
oX2FJYOFCFcinQgGkUOaBJK1K0bo1ouaBSe4iGPjd54=
The resulting base64 data above, if submitted using the data parameter to Guacamole, will authenticate a user and grant them access to the connections described in the JSON (at least until the expires timestamp is reached, at which point the JSON will no longer be accepted).
Note: The OpenSSL utility is not an explicit dependency of the kcm-guacamole-auth-json
package as it's not inherently required by the actual Guacamole extension. If you do not already have the OpenSSL utility installed, you will need to install it before running the encrypt-json.sh
reference implementation:
$ sudo yum install openssl