Skip to main content
Advanced SSH config
===================

|Travis| |PyPI version| |PyPI downloads| |License| |Requires.io|
|Gitter|

|ASSH logo - Advanced SSH Config logo|

Enhances ``ssh_config`` file capabilities

**NOTE**: This program is called by
`ProxyCommand <http://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts#ProxyCommand_with_Netcat>`__
from `lib-ssh <https://www.libssh.org>`__.

--------------

It works *transparently* with :

- ssh
- scp
- rsync
- git
- and even desktop applications depending on ``lib-ssh`` (for instance
`Tower <http://www.git-tower.com>`__, `Atom.io <https://atom.io>`__,
`SSH Tunnel Manager <http://projects.tynsoe.org/fr/stm/>`__)

--------------

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.

Usage
-----

.. code:: console

$ assh --help
Usage: assh [OPTIONS] COMMAND [arg...]

Commands:
build Build .ssh/config based on .ssh/config.advanced
connect <host> Open a connection to <host>
info <host> Print connection informations
init Build a .ssh/config.advanced file based on .ssh/config
generate-etc-hosts Print a /etc/hosts file of .ssh/config.advanced
stats Print statistics

Options:
--version show program's version number and exit
-h, --help show this help message and exit
-p PORT, --port=PORT SSH port
-c CONFIG_FILE, --config=CONFIG_FILE
ssh_config file
-f, --force
-v, --verbose
-l LOG_LEVEL, --log_level=LOG_LEVEL
--dry-run

Commmand line features
----------------------

**Gateway chaining**

.. code:: bash

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``.

.. code:: bash

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**: ``gate`` -> ``gate.domain.tld``
- **gateways**: transparent ssh connections chaining
- **includes**: split configuration into multiple files, support
globbing
- **local command execution**: finally a way to execute a command
locally on connection
- **inheritance**: ``inherits = gate.domain.tld``
- **variable expansion**: ``User = $USER`` (take $USER from
environment)
- **smart proxycommand**: connect using ``netcat``, ``socat`` or custom
handler

Config example
--------------

``~/.ssh/config.advanced``

.. code:: ini

# 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

[^vm-[0-9]*\.joe\.com$]
gateways = bar # `ssh vm-42.joe.com will use `bar` as gateway which
# itself will use `foo.com` as gateway

[default]
ProxyCommand = assh --port=%p connect %h

--------------

.. code:: ini

# 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-[0-9]*\.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 ~/.ssh/configs/*/host.config
# The `Includes` directive must be in the `[default]` section

Port = 22
User = root
IdentityFile = ~/.ssh/id_rsa
ProxyCommand = assh connect %h --port=%p
Gateways = direct
PubkeyAuthentication = yes
VisualHostKey = yes
ControlMaster = auto
ControlPath = ~/.ssh/controlmaster/%h-%p-%r.sock
EscapeChar = ~

Installation
------------

Download the latest build

.. code:: console

$ curl -L https://github.com/moul/advanced-ssh-config/releases/download/v1.1.0/assh-`uname -s`-`uname -m` > /usr/local/bin/assh
$ chmod +x /usr/local/bin/assh

Using Pypi

.. code:: console

$ pip install advanced-ssh-config

Or by cloning

.. code:: console

$ git clone https://github.com/moul/advanced-ssh-config
$ cd advanced-ssh-config
$ make install

First run
---------

Automatically generate a new ``.ssh/config.advanced`` based on your
current ``.ssh/config`` file:

.. code:: console

$ assh init > ~/.ssh/config.advanced
$ assh build -f

Tests
-----

.. code:: console

$ make test

Docker
------

Build

.. code:: console

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

Run

.. code:: console

$ 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
------------

- `Christo DeLange <https://github.com/dldinternet>`__

--

© 2009-2015 Manfred Touron - `MIT
License <https://github.com/moul/advanced-ssh-config/blob/master/License.txt>`__.

.. |Travis| image:: https://img.shields.io/travis/moul/advanced-ssh-config.svg
:target: https://travis-ci.org/moul/advanced-ssh-config
.. |PyPI version| image:: https://img.shields.io/pypi/v/advanced-ssh-config.svg
:target: https://pypi.python.org/pypi/advanced-ssh-config/
.. |PyPI downloads| image:: https://img.shields.io/pypi/dm/advanced-ssh-config.svg
:target:
.. |License| image:: https://img.shields.io/pypi/l/advanced-ssh-config.svg?style=flat
:target: https://github.com/moul/advanced-ssh-config/blob/develop/LICENSE.md
.. |Requires.io| image:: https://img.shields.io/requires/github/moul/advanced-ssh-config.svg
:target: https://requires.io/github/moul/advanced-ssh-config/requirements/
.. |Gitter| image:: https://img.shields.io/badge/chat-gitter-ff69b4.svg
:target: https://gitter.im/moul/advanced-ssh-config
.. |ASSH logo - Advanced SSH Config logo| image:: https://raw.githubusercontent.com/moul/advanced-ssh-config/develop/assets/assh.jpg
:target: https://github.com/moul/advanced-ssh-config

Download files

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

Source Distribution

advanced-ssh-config-1.1.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

advanced_ssh_config-1.1.0-py27-none-any.whl (25.4 kB view details)

Uploaded Python 2.7

advanced_ssh_config-1.1.0-py26-none-any.whl (25.4 kB view details)

Uploaded Python 2.6

advanced_ssh_config-1.1.0-py2.7.egg (49.4 kB view details)

Uploaded Egg

advanced_ssh_config-1.1.0-py2.6.egg (49.6 kB view details)

Uploaded Egg

advanced-ssh-config-1.1.0.macosx-10.10-intel.tar.gz (38.5 kB view details)

Uploaded Source

File details

Details for the file advanced-ssh-config-1.1.0.tar.gz.

File metadata

File hashes

Hashes for advanced-ssh-config-1.1.0.tar.gz
Algorithm Hash digest
SHA256 5bebaa3d911fbaf5848194c61059bcad62822920c42bd30751885ae1dab0ed48
MD5 c14bb1cd0bab0b3fa6c69efb5bce2e69
BLAKE2b-256 d25aae33754f3508a7273b183557ca7f43e3e9676fae0f8b7582da087eb8ca76

See more details on using hashes here.

File details

Details for the file advanced_ssh_config-1.1.0-py27-none-any.whl.

File metadata

File hashes

Hashes for advanced_ssh_config-1.1.0-py27-none-any.whl
Algorithm Hash digest
SHA256 dd04849c7c2729b3bdcf10d1697339e30272dbbc924defd01750f061918f4ad1
MD5 1edea4fc3b0d886635085fa7cbde87e5
BLAKE2b-256 4309ae3ca0ae57cf2cd15c42728cb10c76d16b471a74b67b896c2336c7b174c1

See more details on using hashes here.

File details

Details for the file advanced_ssh_config-1.1.0-py26-none-any.whl.

File metadata

File hashes

Hashes for advanced_ssh_config-1.1.0-py26-none-any.whl
Algorithm Hash digest
SHA256 6603c0428ec4ecab002a8bc91f0fd0e641b026a6f30e163f1097da343ca58ee3
MD5 376681a9b2f5b4fb614dab7a2ceaf3e6
BLAKE2b-256 f0b058503d405f350e2fb2c73f954847ea55b79ba4ad92a2e0cb5203ca8d49af

See more details on using hashes here.

File details

Details for the file advanced_ssh_config-1.1.0-py2.7.egg.

File metadata

File hashes

Hashes for advanced_ssh_config-1.1.0-py2.7.egg
Algorithm Hash digest
SHA256 25ae4cf6e3362e61736a7f2583df39cd3ca504608edfe9910af48334a70f7473
MD5 11cad2471cdcde07f2cb4568f7bda955
BLAKE2b-256 0d5185e6fdc8753bc5a6c845e621f5d7fe3cd510f5f4554c0390ad74b546afdc

See more details on using hashes here.

File details

Details for the file advanced_ssh_config-1.1.0-py2.6.egg.

File metadata

File hashes

Hashes for advanced_ssh_config-1.1.0-py2.6.egg
Algorithm Hash digest
SHA256 e9687ca6c6753015b171335e1d09d86f65d91023e69e9c68e8eb06f4c98c3df6
MD5 3462fa58d32b061b475a95dba76225ee
BLAKE2b-256 ade35332d13ce3827c362c7963ccc7a8f53d6e45ae7981ccd60c54614a6d59fc

See more details on using hashes here.

File details

Details for the file advanced-ssh-config-1.1.0.macosx-10.10-intel.tar.gz.

File metadata

File hashes

Hashes for advanced-ssh-config-1.1.0.macosx-10.10-intel.tar.gz
Algorithm Hash digest
SHA256 4eb6b901081f96e9fa7a9ae34b1794aa12f33805c64a6641cddef0f6a8c984b2
MD5 f896e4b68517ed97e61a25d34e6cb853
BLAKE2b-256 b515aa06d0df6d06a38936d0a57b16e2bf0185e1449480d5e47aab7c7969799d

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.0 This release

6 files

1.0.1

6 files

1.0.0

6 files

0.18.0

2 files

0.17.0

0.16.0

4 files

0.15.1

5 files

0.15.0

3 files

0.14.2

3 files

0.14.1

3 files

0.13.1

1 file

0.12.2

1 file

0.12.1

1 file

0.10.1

1 file

0.9.2

1 file

0.9.1

1 file

0.7.1

1 file

0.6.5

1 file

0.6.4

1 file

0.6.3

1 file

0.6.2

1 file

0.6.1

1 file

0.5.4

1 file

0.5.3

1 file

0.5.1

1 file

0.5.0

1 file

0.4.2

1 file

0.3.7

1 file

0.3.6

1 file

0.3.5

1 file

0.3.4

1 file

0.3.3

1 file

0.3.2

1 file

0.2.1

1 file

0.2.0

Supported by

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