Skip to main content

Extremely simple, pure-python library to parse ssh_config files.

Project description

pysshconfig

Extremely simple, pure-python library to read ssh_config files. Useful to see what keywords/options are applied to a certain host, just like the official ssh client would.

Example usage

Let's say your ~/.ssh/config file looks like this:

Host special.example.net
    User root
    Port 2222

Host *.example.com !insecure.example.com
    ForwardAgent yes
    User johndoe
    PreferredAuthentications publickey

Host *
    ForwardAgent no
    HashKnownHosts no

Then you can parse it like this:

import os.path
import pysshconfig as psc
with open(os.path.expanduser('~/.ssh/config')) as f:
    ssh_config = psc.load(f)

Now check what keywords are applied to a certain host like this:

>>> ssh_config.get_config_for_host('somehost.example.com')
{'ForwardAgent': 'yes', 'User': 'johndoe', 'PreferredAuthentications': 'publickey', 'HashKnownHosts': 'no'}

>>> ssh_config.get_config_for_host('insecure.example.com')
{'ForwardAgent': 'no', 'HashKnownHosts': 'no'}

>>> ssh_config.get_config_for_host('special.example.net')
{'User': 'root', 'Port': '2222', 'Forwardagent': 'yes', 'Preferredauthentications': 'publickey', 'HashKnownHosts': 'no'}

Adding a new Host block is as easy as modifying a list:

>>> myhosts = ['newhost.example.com', '*.www.example.com', '!test.www.example.com']
>>> myoptions = {'user': 'bob', 'port': '8080'}
>>> ssh_config.insert(0, psc.HostBlock(psc.HostList(myhosts), psc.KeywordSet(myoptions)))

>>> psc.dumps(ssh_config)
Host newhost.example.com *.www.example.com !test.www.example.com
    User bob
    Port 8080

Host special.example.net
    User root
    Port 2222

Host *.example.com !insecure.example.com special.example.net
    ForwardAgent yes
    User johndoe
    PreferredAuthentications publickey

Host *
    ForwardAgent no
    HashKnownHosts no

You can modify existing keywords as if they were dictionaries:

>>> hostblocks = ssh_config.get_matching_hosts('host.www.example.com')
>>> for _, kw in hostblocks:
...    kw['user'] = "alice"
...
>>> psc.dumps(ssh_config)
Host newhost.example.com *.www.example.com !test.www.example.com
    User alice
    Port 8080

Host special.example.net
    User root
    Port 2222

Host *.example.com !insecure.example.com special.example.net
    ForwardAgent yes
    User alice
    PreferredAuthentications publickey

Host *
    ForwardAgent no
    HashKnownHosts no
    User alice

Limitations

Formatting from the original file will not be preserved. To be more specific:

  • The keywords will change to match the correct case ('hashknownhosts' -> 'HashKnownHosts')
  • Comments and empty lines will be removed

It will validate that the keywords are correct, but it does not perform any validation on their values.

It does not support the Match keyword yet.

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

pysshconfig-0.0.1.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

pysshconfig-0.0.1-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file pysshconfig-0.0.1.tar.gz.

File metadata

  • Download URL: pysshconfig-0.0.1.tar.gz
  • Upload date:
  • Size: 21.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.4.2 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.2

File hashes

Hashes for pysshconfig-0.0.1.tar.gz
Algorithm Hash digest
SHA256 dc9aa06931928b94ebb4a747879a9832f3fd4bb98a74cfdbc315b4b4a6535e5e
MD5 0d47707302dd6f41d2fad0982cc26aed
BLAKE2b-256 d791c224f46755e2d45c05f7048a218c980ae911816af0498c5a385f7c9ef491

See more details on using hashes here.

File details

Details for the file pysshconfig-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: pysshconfig-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.4.2 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.2

File hashes

Hashes for pysshconfig-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 33310923983be8be4ed46d4a737f69c03a2b8a8c863e7c0bd08afb78f7b31b59
MD5 6a87f4beea1e8fa7bcea7087f44dde93
BLAKE2b-256 684272e5373ebbae6af89357320cbf36cb65ee71591ce46e4ac9ed6ee765ddb2

See more details on using hashes here.

Supported by

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