Intro

Conman was created because I wanted a simple solution to have a list of different servers/machines that I needed to connect to regularly.

Many connection managers exist and many even support RDP, SSH and VNC, and I have tried many of them, but they all had one or more issues that annoyed me.

So the result was this application.

Features

  • Single list of all the connections, with a Name, Tags and a Type field.
  • Searchable by simply starting to type, search is case-insensitive.
  • Controllable completely with keyboard.
  • Supports opening connections to RDP, SSH and VNC.
  • Each connection have their own independent window/process.
  • Auto login to RDP, SSH and VNC.
  • Configuration handled with simple json files.
  • Configurations can be placed in alternative location from the application, to support sharing the configuration across multiple computers.

Requirements

  • Operating systems
    • Windows, x64
  • .NET 6+ runtime

Usage

Application can be started in two ways.

Directly call the conman.exe or with a shortcut, in this case conman will look for the config.json file in the same folder as conman.exe.

Or you can provide a path to the config.json file as the first argument to conman.exe like C:\apps\conman\conman.exe C:\configs\conman\config.json remember " (quotes) if path contains spaces.

Keybindings

  • List keybindings
    • Enter, Opens a connection to the currently selected server/machine in the list
    • Ctrl + R, Resets the list to show the full list of servers/machines
    • A-Z, 0-9, Numpad 0-9, Period, Comma, start to search the full list of servers/machines
    • Arrow Up or Down, Moves the selection up or down the list
  • Search input keybindings
    • Escape, Closes the search input and sets focus to list
    • Arrow Up or Down, Closes the search input and sets focus to list
    • Enter, Opens a connection to the currently selected server/machine in the list

Configuration

Config.json

The config.json file has the following structure.

{
 "StartupStore": "my-connections",
 "WindowWidth": 768,
 "WindowHeight": 1024,
 "WindowX": 0,
 "WindowY": 0
}

Config.json fields

  • StartupStore, this defines the name of the store containing all the connections the application should display, eg. my-connections, should not contain an extension.
  • WindowWidth, width of the main window.
  • WindowHeight, height of the main window.
  • WindowX, main window X location relative to left of startup screen.
  • WindowY, main window Y location relative to top of startup screen.

If WindowX and WindowY both are 0 then the application will start in the middle of the screen

My-connections.json

The my-connections.json file has the following structure.

This file must be placed in the same folder as config.json.

This file can alternatively be called, my-connections.store, however this is an old extension, and may be removed in the future.

{
 "name": "my-connections",
 "last_changed": "2022-06-12 10:42:00",
 "sorting": "tags,name,type",
 "connection_defaults": {
  "rdp": {
   "key": "",
   "name": "",
   "tags": "",
   "connection_type": "",
   "server_host": "",
   "server_port": "3389",
   "credentials_username": "",
   "credentials_password": "",
   "credentials_domain": "",
   "settings_window_width": "1600",
   "settings_window_height": "1200",
   "settings_enable_compression": "False",
   "settings_colordepth": 24,
   "settings_enable_log": false,
   "settings_disable_credsspsupport": false,
   "settings_enable_autoreconnect": true,
   "settings_enable_drives": false,
   "settings_enable_printers": false,
   "settings_enable_clip": true,
   "settings_enable_smartcard": false,
   "settings_enable_winkey": true
  },
  "ssh": {
   "key": "",
   "name": "",
   "tags": "",
   "connection_type": "",
   "server_host": "",
   "server_port": "22",
   "credentials_username": "",
   "credentials_password": "",
   "credentials_domain": "",
   "credentials_certificate": "",
   "settings_window_width": "200",
   "settings_window_height": "50",
   "settings_enable_compression": "False",
   "settings_colordepth": 24,
   "settings_enable_log": false,
   "settings_disable_credsspsupport": false,
   "settings_enable_autoreconnect": true,
   "settings_enable_drives": false,
   "settings_enable_printers": false,
   "settings_enable_clip": true,
   "settings_enable_smartcard": false,
   "settings_enable_winkey": true
  },
  "vnc": {
   "key": "",
   "name": "",
   "tags": "",
   "connection_type": "",
   "server_host": "",
   "server_port": "5900",
   "credentials_username": "",
   "credentials_password": "",
   "credentials_domain": "",
   "settings_window_width": "1600",
   "settings_window_height": "1200",
   "settings_enable_compression": "False",
   "settings_colordepth": 24,
   "settings_enable_log": false,
   "settings_disable_credsspsupport": false,
   "settings_enable_autoreconnect": true,
   "settings_enable_drives": false,
   "settings_enable_printers": false,
   "settings_enable_clip": true,
   "settings_enable_smartcard": false,
   "settings_enable_winkey": true
  }
 },
 "connections": [
  {
   "key": "1",
   "name": "RDP server",
   "tags": "tag1,tag2,tag3",
   "connection_type": "rdp",
   "server_host": "ip or hostname",
   "credentials_username": "username",
   "credentials_password": "password",
   "credentials_domain": "domain"
  },

  {
   "key": "2",
   "name": "VNC server",
   "tags": "tag4,tag5",
   "connection_type": "vnc",
   "server_host": "ip or hostname",
   "credentials_password": "password"
  },

  {
   "key": "3",
   "name": "SSH server",
   "tags": "tag6,tag7,tag8",
   "connection_type": "ssh",
   "server_host": "ip or hostname",
   "credentials_username": "username",
   "credentials_password": "password",
   "settings_window_width": "175",
   "credentials_certificate": "path/to/ssh-certificate"
  }
 ]
}

My-connections.json fields

  • name, name of the connections list.
  • last_changed, a date to indicate when it was last changed.
  • sorting, how should the list of connections be sorted, can be any combination of tags,name,type comma separated and with no spaces, all three names must be there.
  • connection_defaults, contains all the default values used for each of the connections of that type, none of the key/values should be removed, but the values can be changed, and will be used if the same key is not present on a connection.
    • credentials_certificate, the certificate used here must be a putty compatible .PPK file format, if your current key was made with OpenSSH then you can use the puttygen tool to make a converted version of your key to use.
  • connections, this is where each of the connections the application will list is added, as a minimum the fields, key, name, tags, connection_type, server_host should be added, key and name should be unique between all the connections.
    Other settings from the default can be copied to make custom changes for that connection, will override default.

Changelog

# Changelog

All notable changes to this project will be documented here.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

---

## Unreleased changes

-   No changes

---

## Releases

### 1.0.1 -- 2022-06-19

-   Added more keybindings to start search
-   Updated handling of search start
-   Updated WinRDP to version 1.1.1
    -   Contains fixes for positioning the window in the center of the screen

### 1.0.0 -- 2022-06-12

-   Added support for window size and position definition in config.json
-   Added support for using a certificate with SSH connection
-   Added a check for duplicate `key` field values in store.json file
-   General optimization and code cleanup

Previous Versions

OSVersionLink
windowslatestdownload
windows1.0.1download
windows1.0.0download