{"library":"sshconf","title":"sshconf: Lightweight SSH Config Library","type":"library","description":"sshconf is a Python library designed for reading and modifying your `~/.ssh/config` file in a non-intrusive way. It aims to keep the file's structure largely intact after modifications, providing a simple interface to manage SSH client configurations. The current version is 0.2.7. It has an irregular release cadence, with the last release in June 2024.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install sshconf"],"cli":null},"imports":["import sshconf\nconfig = sshconf.read('~/.ssh/config')","import sshconf\nconfig = sshconf.empty()"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/sorend/sshconf","docs":null,"changelog":null,"pypi":"https://pypi.org/project/sshconf/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"import sshconf\nimport os\n\n# Create a temporary config file for demonstration\ntemp_config_path = os.path.expanduser('~/.ssh/config_temp')\n\n# Ensure the .ssh directory exists\nos.makedirs(os.path.dirname(temp_config_path), exist_ok=True)\n\n# Start with an empty configuration\nconfig = sshconf.empty()\n\n# Add a new host entry\nconfig.add(\n    'devserver',\n    Hostname='192.168.1.100',\n    User='devuser',\n    IdentityFile=os.path.expanduser('~/.ssh/id_rsa_dev')\n)\n\n# Update an existing entry or add a new parameter\nconfig.set(\n    'devserver',\n    Port=2222,\n    ForwardAgent='yes'\n)\n\n# Add another host with minimal options\nconfig.add(\n    'testserver',\n    Hostname='test.example.com',\n    User='testuser'\n)\n\n# Remove a parameter from a host\nconfig.unset('devserver', 'ForwardAgent')\n\n# Get configuration for a host\nhost_config = config.host('devserver')\nprint(f\"Devserver config: {host_config.to_dict()}\")\n\n# Write the changes to a new file (or save() to overwrite original)\nconfig.write(temp_config_path)\n\nprint(f\"SSH config written to: {temp_config_path}\")\nprint(\"Contents of the temporary config file:\")\nwith open(temp_config_path, 'r') as f:\n    print(f.read())\n\n# Clean up the temporary file (optional)\n# os.remove(temp_config_path)","lang":"python","description":"This quickstart demonstrates how to create a new SSH configuration, add and modify host entries, and then write the configuration to a file. It uses `sshconf.empty()` to start a new configuration and `write()` to save it, avoiding modification of your actual `~/.ssh/config` file for safety. Remember that `save()` will overwrite the file it was read from.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.2.7","pypi_latest":"0.2.7","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.5,"avg_import_s":0,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0,"mem_mb":0.2,"disk_size":"17.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0,"mem_mb":0.2,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0,"mem_mb":0.2,"disk_size":"19.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0,"mem_mb":0.2,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0,"mem_mb":0.2,"disk_size":"11.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0,"mem_mb":0.2,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0,"mem_mb":0.4,"disk_size":"11.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.4,"import_time_s":0,"mem_mb":0.2,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0,"mem_mb":0.2,"disk_size":"17.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sshconf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0,"mem_mb":0.2,"disk_size":"18M"}]}}