Skip to main content

Add some magic to SSH and .ssh/config

Project description

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

Project details


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

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 Source

advanced_ssh_config-1.1.0-py2.6.egg (49.6 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.

Supported by

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