Conman
Conman is a RDP, SSH and VNC connection manager
Created Aug 1, 2024 - Last updated: Aug 1, 2024
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 listCtrl + R, Resets the list to show the full list of servers/machinesA-Z, 0-9, Numpad 0-9, Period, Comma, start to search the full list of servers/machinesArrow Up or Down, Moves the selection up or down the list
- Search input keybindings
Escape, Closes the search input and sets focus to listArrow Up or Down, Closes the search input and sets focus to listEnter, 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,typecomma 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
puttycompatible.PPKfile format, if your current key was made with OpenSSH then you can use theputtygentool to make a converted version of your key to use.
- credentials_certificate, the certificate used here must be a
- 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_hostshould be added,keyandnameshould 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
| OS | Version | Link |
|---|---|---|
| windows | latest | download |
| windows | 1.0.1 | download |
| windows | 1.0.0 | download |