Skip to main content

Add some magic to SSH and .ssh/config

Project description

PyPI version Build Status authors library users Total views Views in the last 24 hours PyPi downloads Bitdeli Badge Gitter chat

Enhances ssh_config file capabilities

NOTE: This program is called by ProxyCommand from lib-ssh.


It works transparently with :


The .ssh/config file is automatically generated, you need to update .ssh/config.advanced file instead; With new features and a better regex engine for the hostnames.

Note: Each time the script is called, it recreate a fresh new ``.ssh/config``, so be careful, backup your old .ssh/config file !

Commmand line features

Gateway chaining

ssh foo.com/bar.com

Connect to bar.com using ssh and create a proxy on bar.com to foo.com. Then connect to foo.com using the created proxy on bar.com.

ssh foo.com/bar.com/baz.com

Connect to foo.com using bar.com/baz.com which itself uses baz.com.

Configuration features

  • regex for hostnames - gw.school-..domain.net

  • aliases

  • gateways - transparent ssh connections chaining

  • includes files

  • real local command - executes a command on the local shell when connecting

  • intelligent proxycommand with fallbacks

  • inherits configuration

  • variable expansion

Config example

~/.ssh/config.advanced

# Simple example
[foo.com]
user = pacman
port = 2222

[bar]
hostname = 1.2.3.4
gateways = foo.com   # `ssh bar` will use `foo.com` as gateway

[default]
ProxyCommand = advanced-ssh-config --hostname=%h --port=%p -u

# Complete example
[foo]
user = pacman
port = 2222
hostname = foo.com

[bar]
hostname = 1.2.3.4
gateways = foo
# By running `ssh bar`, you will ssh to `bar` through a `ssh foo`

[vm-.*\.joe\.com]
IdentityFile = ~/.ssh/root-joe
gateways = direct joe.com joe.com/bar
# Will try to ssh without proxy, then fallback to joe.com proxy, then fallback to joe.com through bar
DynamicForward = 43217
LocalForward = 1723 localhost:1723
ForwardX11 = yes

[default]
Includes = ~/.ssh/config.advanced2 ~/.ssh/config.advanced3
Port = 22
User = root
IdentityFile = ~/.ssh/id_rsa
ProxyCommand = advanced-ssh-config --hostname=%h --port=%p -u
Gateways = direct
PubkeyAuthentication = yes
VisualHostKey = yes
ControlMaster = auto
ControlPath = ~/.ssh/controlmaster/%h-%p-%r.sock
EscapeChar = ~

Installation

From Pypi

# pip install advanced-ssh-config

Or by cloning

# git clone https://github.com/moul/advanced-ssh-config
# cd advanced-ssh-config
# python setup.py install

Backup your old ~/.ssh/config file

# cp ~/.ssh/config ~/.ssh/config.backup

Generate the new config file

# advanced-ssh-config -u

Or add this line manually in your ~/.ssh/config file

...
ProxyCommand = advanced-ssh-config --hostname=%h --port=%p -u
...

Tests

Install test dependencies and run tests

# python setup.py test

Pep8

# pep8 advanced_ssh_config | grep -v /tests/

Docker

Build

# docker build -t moul/advanced-ssh-config .

Run

# docker run -rm -i -t moul/advanced-ssh-config
or
# docker run -rm -i -t -v $(pwd)/:/advanced_ssh_config moul/advanced-ssh-config
or
# docker run -rm -i -t -v moul/advanced-ssh-config python setup.py test

Contributors

© 2009-2015 Manfred Touron - MIT License.

Project details


Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page