Skip to main content

pysshconfig

Python package codecov

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.

Requires Python >=3.5

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.

Metadata

Release files for pysshconfig 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pysshconfig 0.0.2
File Size Uploaded
pysshconfig-0.0.2.tar.gz 21.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pysshconfig 0.0.2
File Interpreter ABI Platform
pysshconfig-0.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 27.0 kB

Release files / pysshconfig-0.0.2.tar.gz

Download URL pysshconfig-0.0.2.tar.gz
Size 21.5 kB
Tags Source
SHA-256 checksum
How to use checksums
6285b4403a089282ddb7781cd32f06de7c4010d092a1b308f4ef0c87b28eb8fe
BLAKE2b-256 checksum
How to use checksums
00e02f1d73b9ae9d05991c1473eba17ae1f35c855d40db633b2eea5548cd758c
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / pysshconfig-0.0.2-py3-none-any.whl

Download URL pysshconfig-0.0.2-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d2edaaf26f9141fedb3ee0066dc20dc7c8d3553e72800f0bf42aac1e60ce31bb
BLAKE2b-256 checksum
How to use checksums
1c6466a93007d85301057ae06780c7b82aa073f78a3fd294e0259e15d96fe77f
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page