manssh is a command line tool for managing your ssh alias config easily, inspired by storm project, powered by Go.
Note:
This project is actually a simple glue project, the most complex and core parsing ssh config file logic implements by ssh_config, I didn't do much.
At first it was just a imitation of storm, now it has become a little different.
- No dependence.
- Add, list, query, delete ssh alias record.
- Backup ssh config.
- Support Include directive.
Before 1.17
go get -u github.com/xwjdsh/manssh/cmd/manssh
1.17 or higher
go install github.com/xwjdsh/manssh/cmd/manssh
brew tap xwjdsh/tap
brew install xwjdsh/tap/manssh
alias manssh='docker run -t --rm -v ~/.ssh/config:/root/.ssh/config wendellsun/manssh'
Download it from releases, and extract it to your PATH
directory.
% manssh
NAME:
manssh - Manage your ssh alias configs easily
USAGE:
manssh [global options] command [command options] [arguments...]
VERSION:
master
COMMANDS:
add, a Add a new SSH alias record
list, l List or query SSH alias records
update, u Update SSH record by specifying alias name
delete, d Delete SSH records by specifying alias names
backup, b Backup SSH config files
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--file value, -f value (default: "/Users/wendell/.ssh/config")
--help, -h show help
--version, -v print the version
# manssh add test2 2.2.2.2
# manssh add test1 [email protected]:77 -c IdentityFile=~/.ssh/wendell
% manssh add test1 [email protected]:77 -i ~/.ssh/wendell
✔ alias[test1] added successfully.
test1 -> [email protected]:77
identityfile = /Users/wendell/.ssh/wendell
Username and port config is optional, the username is current login username and port is 22
by default.
Using -c
to set more config options. For convenience, -i xxx
can instead of -c identityfile=xxx
.
# manssh list
# manssh list "*"
# manssh list Test -ic
% manssh list test1 77
✔ Listing 1 records.
test1 -> [email protected]:77
identityfile = /Users/wendell/.ssh/wendell
It will display all alias records If no params offered, or it will using params as keywords query alias records.
If there is a -it
option, it will ignore case when searching.
# manssh update test1 -r test2
# manssh update test1 [email protected]:22022
% manssh update test1 -i "" -r test3 -c hostname=3.3.3.3 -c port=22022
✔ alias[test3] updated successfully.
test3 -> [email protected]:22022
Update an existing alias record, it will replace origin user, hostname, port config's if connected string param offered.
You can use -c
to update single and extra config option, -c identityfile= -c proxycommand=
will remove identityfile
and proxycommand
options.
For convenience, -i xxx
can instead of -c identityfile=xxx
Rename the alias specified by -r
flag.
# manssh delete test1
% manssh delete test1 test2
✔ alias[test1,test2] deleted successfully.
% manssh backup ./config_backup
✔ backup ssh config to [./config_backup] successfully.
If you use the Include
directive, there are some extra notes.
Add -p
(--path) flag for list
,add
,update
,delete
command to show the file path where the alias is located, it can also be set by the MANSSH_SHOW_PATH environment variable.
MANSSH_SHOW_PATH
Set to true
to show the file path where the alias is located. Default is false
.
Add -ap
(--addpath) flag for add
command to specify the file path to which the alias is added, it can also be set by the MANSSH_ADD_PATH environment variable.
MANSSH_ADD_PATH
This file path indicates to which file to add the alias. Default is the entry config file.
For convenience, you can export these environments in your .zshrc
or .bashrc
,
example:
export MANSSH_SHOW_PATH=true
export MANSSH_ADD_PATH=~/.ssh/config.d/temp