automate SSH configs with python
I use sshconfigs a lot. It's always good to connect a custom configured ssh connection with just "ssh host_name".
recently, I released a command line utility to handle ssh configs. It does not bring magical stuff compared to vim ~/.ssh/config. But I just like this way more, and commands like list/search would be pretty useful if you have a lot of servers in your ssh config.
after the release, a lot of people asked to use it as a library instead of a command-line tool. So, here it is, a little documentation about how to use storm as a python library (luckily, it was decoupled enough to use it like this.)
installation
pip install stormssh
</code></pre>
initialization:
from storm import ssh_config
sconfig = ssh_config.ConfigParser("/home/emrebey/.ssh/config")
sconfig.load()
</code></pre>
get the raw config
output:
[{
'host': 'vps',
'type': 'entry',
'options': {
'hostname': 'emreyilmaz.me',
'user': 'root',
'port': '22'
},
'order': 1
}, {
'host': 'netscaler',
'type': 'entry',
'options': {
'hostname': 'netscaler.com',
'user': 'root',
'port': '22'
},
'order': 2
}
]
</code></pre>
add a host to config
sconfig.add_host('name', {
'user': 'user',
'hostname': 'hostname.com',
'port': 2400,
})
sconfig.writetossh_config() # save it to the config
</code></pre>
modify a host
sconfig.update_host('name', {
'user': 'root',
'hostname': 'root.com',
'port': 22,
})
</code></pre>
deleting a single host by name
from storm.exceptions import StormValueError
try:
sconfig.delete_host('name')
except StormValueError:
pass
</code></pre>
delete all hosts
sconfig.deleteallhosts()
</code></pre>
searching hosts
print sconfig.search_host('vps')
</code></pre>
output:
[{
'host': 'vps',
'type': 'entry',
'options': {
'hostname': 'emreyilmaz.me',
'user': 'emre',
'port': '22'
},
'order': 1
}, {
'host': 'vps_backup',
'type': 'entry',
'options': {
'hostname': 'emreyilmaz.me',
'user': 'root',
'port': '24'
},
'order': 2
}
]
</code></pre>
browse ssh_config.py for more.
Written by Emre Yılmaz
Related protips
3 Responses
See also github-keygen, a tool dedicated to build you the best settings for your Github connections: https://github.com/dolmen/github-keygen
@dolmen, looks nice.
https://github.com/emre/storm/issues/87#issuecomment-56963429
from storm.parsers.sshconfigparser import ConfigParser as StormParser
config = StormParser("/users/emre/.ssh/config")
config.load()
[{'host': '', 'type': 'comment', 'order': 1, 'value': '#Host *'}, ...]config.search_host("blog")
[{'host': 'blog', 'type': 'entry', 'options': {'hostname': '178.62.233.223', 'user': 'root', 'port': '22'}, 'order': 18}]