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.
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pysshconfig-0.0.2.tar.gz
.
File metadata
- Download URL: pysshconfig-0.0.2.tar.gz
- Upload date:
- Size: 21.5 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6285b4403a089282ddb7781cd32f06de7c4010d092a1b308f4ef0c87b28eb8fe |
|
MD5 | 4bb27a4ef02d7e9561bd9b2f289004b7 |
|
BLAKE2b-256 | 00e02f1d73b9ae9d05991c1473eba17ae1f35c855d40db633b2eea5548cd758c |
File details
Details for the file pysshconfig-0.0.2-py3-none-any.whl
.
File metadata
- Download URL: pysshconfig-0.0.2-py3-none-any.whl
- Upload date:
- Size: 5.5 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2edaaf26f9141fedb3ee0066dc20dc7c8d3553e72800f0bf42aac1e60ce31bb |
|
MD5 | f81a47e2e4b790916b7c5802b6d99acb |
|
BLAKE2b-256 | 1c6466a93007d85301057ae06780c7b82aa073f78a3fd294e0259e15d96fe77f |