Full docs can be found here: https://sshush.bencromwell.com
Sshush takes a bunch of YAML
and produces an SSH config file.
- Source:
~/.ssh/config.yml
- Destination:
~/.ssh/config
I wanted a way to manage my SSH config file based on inheritance.
This lets you group together hosts and common options, that can be optionally and selectively overridden.
For example:
- All my servers at cloud provider have the same port.
- All my servers at other cloud provider share a common username.
- All my local Unifi devices share a specific SSH key.
- All my ancient Cisco hardware at work shares an outdated Cipher configuration.
Download a release from the GitHub releases page. Place it somewhere in your $PATH
.
Options that apply to the catch-all Host *
.
Basic options such as a default User
or IdentityFile
.
Can be overridden by group or individual host entries.
This example demonstrates global and defaults:
---
global:
UseRoaming: "no"
default:
User: ben
IdentityFile: ~/.ssh/id_rsa
web_servers:
Config:
Port: 2201
IdentityFile: ~/.ssh/digital_ocean
Hosts:
projects-do-1: projects-do-1.example.com
projects-do-2: projects-do-2.example.com
projects-aws:
HostName: projects-aws.example.com
IdentityFile: ~/.ssh/aws
raspberry_pis:
Config:
User: pi
Hosts:
pi1: 192.168.0.107
pi2: 192.168.0.108
local:
Hosts:
router:
HostName: 192.168.0.1
User: root
kodi: 192.168.0.200
work:
Config:
User: bcromwell
Hosts:
workpc: 10.0.0.80
gitlab: 10.0.0.30
jenkins: 10.0.0.20
This results in:
# Generated by sshush v2.1.0
# From path/to/readme.yaml
# web_servers
Host projects-aws
HostName projects-aws.example.com
IdentityFile ~/.ssh/aws
Port 2201
User ben
Host projects-do-1
HostName projects-do-1.example.com
IdentityFile ~/.ssh/digital_ocean
Port 2201
User ben
Host projects-do-2
HostName projects-do-2.example.com
IdentityFile ~/.ssh/digital_ocean
Port 2201
User ben
# raspberry_pis
Host pi1
HostName 192.168.0.107
IdentityFile ~/.ssh/id_rsa
User pi
Host pi2
HostName 192.168.0.108
IdentityFile ~/.ssh/id_rsa
User pi
# local
Host kodi
HostName 192.168.0.200
IdentityFile ~/.ssh/id_rsa
User ben
Host router
HostName 192.168.0.1
IdentityFile ~/.ssh/id_rsa
User root
# work
Host gitlab
HostName 10.0.0.30
IdentityFile ~/.ssh/id_rsa
User bcromwell
Host jenkins
HostName 10.0.0.20
IdentityFile ~/.ssh/id_rsa
User bcromwell
Host workpc
HostName 10.0.0.80
IdentityFile ~/.ssh/id_rsa
User bcromwell
# Global config
Host *
UseRoaming no
This was originally written in Python, which can be found in the 1.x branch.