hss is an interactive ssh client for multiple servers. It will provide almost the same experience as in the bash environment. It supports:
- interactive input: based on libreadline.
- history: responding to the
C-rkey. - auto-completion: completion from remote server on the
tabkey, for commands and paths.
Command is executed on all servers in parallel. Execution on one server does not need to wait for that on another server to finish before starting. So we can run a command on hundreds of servers at the same time.
Usage: hss [-f hostfile] [-o file] [-u username] [command]...
Options:
-f file file with the list of hosts
-H host specifies a host option, support the same options as the ssh command
-l limit number of multiple ssh to perform at a time (default: unlimited)
-u user the default user name to use when connecting to the remote server
-c opts specify the common ssh options (i.e. '-p 22 -i identity_file')
-o file write remote command output to a file
-i force use a vi-style line editing interface
-v be more verbose
-V show program version
-h display this message
For more information, see https://github.com/six-ddc/hss
- This is a screenshot
-
MacOS
- ...via Homebrew:
brew install hss
- ...via MacPorts:
sudo port selfupdate sudo port install hss
-
Linux
- Install dependency
## on CentOS yum install readline-devel ## on Ubuntu / Debian apt-get install libreadline6-dev
- Compile and install
make && make install -
Or you can download the binary release here .
The fundamental of hss is to execute the ssh command for every host, and then show the results on the terminal. So hss supports every argument supported by the ssh command. Following is an example of the hostfile:
192.168.1.1
-p 2222 [email protected]
-p 2222 -i ~/.ssh/identity_file [email protected]
-p 2222 -oConnectTimeout=3 [email protected]
Connect to servers:
# Specify the hostfile directly
hss -f hostfile
# Or pass servers in arguments
hss -H '192.168.1.1' -H '-p 2222 [email protected]' -H '-p 2222 -i ~/.ssh/identity_file [email protected]' -H '-p 2222 -oConnectTimeout=3 [email protected]'
Passthrough of ssh arguments are supported. For example, by specify -c '-oConnectTimeout=3', sessions without a timeout configured will set its timeout on this argument.
The interactive input is implemented on libreadline, supporting command and path completion from remote, history storage and searching, moving around, etc. (please refer to readline for more)
- Command history is stored in
~/.local/state/hss/historyby default (following XDG Base Directory specification). Falls back to~/.hss_historyfor backward compatibility if the XDG directory cannot be created. - Completion of commands and paths are based on the first server in the list.
- Path completion is available when the first input character is
/,~or..
HSS_HISTORY_FILE- Custom path for command history file. Takes precedence over XDG paths and legacy location.XDG_STATE_HOME- Base directory for state files (defaults to~/.local/state). History will be stored in$XDG_STATE_HOME/hss/history.
Each host in your session is assigned a unique color from a rotating palette (green, yellow, blue, magenta, cyan) to make it easier to visually distinguish output from different servers in multi-host sessions.
- Solve the "@" suffix problem on directory symbol-link.