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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for advanced-ssh-config, version 0.18.0
Filename, size File type Python version Upload date Hashes
Filename, size advanced-ssh-config-0.18.0.macosx-10.10-intel.tar.gz (37.9 kB) File type Dumb Binary Python version any Upload date Hashes View hashes
Filename, size advanced_ssh_config-0.18.0-py26-none-any.whl (24.6 kB) File type Wheel Python version 2.6 Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page