[Home](https://kellyjonbrazil.github.io/jc/) # jc.parsers.ssh_conf jc - JSON Convert `ssh` configuration file and `ssh -G` command output parser This parser will work with `ssh` configuration files or the output of `ssh -G`. Any `Match` blocks in the `ssh` configuration file will be ignored. Usage (cli): $ ssh -G hostname | jc --ssh-conf or $ jc ssh -G hostname or $ cat ~/.ssh/config | jc --ssh-conf Usage (module): import jc result = jc.parse('ssh_conf', ssh_conf_output) Schema: [ { "host": string, "host_list": [ string ], "addkeystoagent": string, "addressfamily": string, "batchmode": string, "bindaddress": string, "bindinterface": string, "canonicaldomains": [ string ], "canonicalizefallbacklocal": string, "canonicalizehostname": string, "canonicalizemaxdots": integer, "canonicalizepermittedcnames": [ string ], "casignaturealgorithms": [ string ], "certificatefile": [ string ], "checkhostip": string, "ciphers": [ string ], "clearallforwardings": string, "compression": string, "connectionattempts": integer, "connecttimeout": integer, "controlmaster": string, "controlpath": string, "controlpersist": string, "dynamicforward": string, "enableescapecommandline": string, "enablesshkeysign": string, "escapechar": string, "exitonforwardfailure": string, "fingerprinthash": string, "forkafterauthentication": string, "forwardagent": string, "forwardx11": string, "forwardx11timeout": integer, "forwardx11trusted": string, "gatewayports": string, "globalknownhostsfile": [ string ], "gssapiauthentication": string, "gssapidelegatecredentials": string, "hashknownhosts": string, "hostbasedacceptedalgorithms": [ string ], "hostbasedauthentication": string, "hostkeyalgorithms": [ string ], "hostkeyalias": string, "hostname": string, "identitiesonly": string, "identityagent": string, "identityfile": [ string ], "ignoreunknown": string, "include": [ string ], "ipqos": [ string ], "kbdinteractiveauthentication": string, "kbdinteractivedevices": [ string ], "kexalgorithms": [ string ], "kexalgorithms_strategy": string, "knownhostscommand": string, "localcommand": string, "localforward": [ string ], "loglevel": string, "logverbose": [ string ], "macs": [ string ], "macs_strategy": string, "nohostauthenticationforlocalhost": string, "numberofpasswordprompts": integer, "passwordauthentication": string, "permitlocalcommand": string, "permitremoteopen": [ string ], "pkcs11provider": string, "port": integer, "preferredauthentications": [ string ], "protocol": integer, "proxycommand": string, "proxyjump": [ string ], "proxyusefdpass": string, "pubkeyacceptedalgorithms": [ string ], "pubkeyacceptedalgorithms_strategy": string, "pubkeyauthentication": string, "rekeylimit": string, "remotecommand": string, "remoteforward": string, "requesttty": string, "requiredrsasize": integer, "revokedhostkeys": string, "securitykeyprovider": string, "sendenv": [ string ], "serveralivecountmax": integer, "serveraliveinterval": integer, "sessiontype": string, "setenv": [ string ], "stdinnull": string, "streamlocalbindmask": string, "streamlocalbindunlink": string, "stricthostkeychecking": string, "syslogfacility": string, "tcpkeepalive": string, "tunnel": string, "tunneldevice": string, "updatehostkeys": string, "user": string, "userknownhostsfile": [ string ], "verifyhostkeydns": string, "visualhostkey": string, "xauthlocation": string } ] Examples: $ ssh -G - | jc --ssh-conf -p [ { "user": "foo", "hostname": "-", "port": 22, "addressfamily": "any", "batchmode": "no", "canonicalizefallbacklocal": "yes", "canonicalizehostname": "false", "checkhostip": "no", "compression": "no", "controlmaster": "false", "enablesshkeysign": "no", "clearallforwardings": "no", "exitonforwardfailure": "no", "fingerprinthash": "SHA256", "forwardx11": "no", "forwardx11trusted": "no", "gatewayports": "no", "gssapiauthentication": "no", "gssapidelegatecredentials": "no", "hashknownhosts": "no", "hostbasedauthentication": "no", "identitiesonly": "no", "kbdinteractiveauthentication": "yes", "nohostauthenticationforlocalhost": "no", "passwordauthentication": "yes", "permitlocalcommand": "no", "proxyusefdpass": "no", "pubkeyauthentication": "true", "requesttty": "auto", "sessiontype": "default", "stdinnull": "no", "forkafterauthentication": "no", "streamlocalbindunlink": "no", "stricthostkeychecking": "ask", "tcpkeepalive": "yes", "tunnel": "false", "verifyhostkeydns": "false", "visualhostkey": "no", "updatehostkeys": "true", "applemultipath": "no", "canonicalizemaxdots": 1, "connectionattempts": 1, "forwardx11timeout": 1200, "numberofpasswordprompts": 3, "serveralivecountmax": 3, "serveraliveinterval": 0, "ciphers": [ "chacha20-poly1305@openssh.com", "aes128-ctr", "aes192-ctr", "aes256-ctr", "aes128-gcm@openssh.com", "aes256-gcm@openssh.com" ], "hostkeyalgorithms": [ "ssh-ed25519-cert-v01@openssh.com", "ecdsa-sha2-nistp256-cert-v01@openssh.com", "ecdsa-sha2-nistp384-cert-v01@openssh.com", "ecdsa-sha2-nistp521-cert-v01@openssh.com", "rsa-sha2-512-cert-v01@openssh.com", "rsa-sha2-256-cert-v01@openssh.com", "ssh-ed25519", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "rsa-sha2-512", "rsa-sha2-256" ], "hostbasedacceptedalgorithms": [ "ssh-ed25519-cert-v01@openssh.com", "ecdsa-sha2-nistp256-cert-v01@openssh.com", "ecdsa-sha2-nistp384-cert-v01@openssh.com", "ecdsa-sha2-nistp521-cert-v01@openssh.com", "rsa-sha2-512-cert-v01@openssh.com", "rsa-sha2-256-cert-v01@openssh.com", "ssh-ed25519", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "rsa-sha2-512", "rsa-sha2-256" ], "kexalgorithms": [ "sntrup761x25519-sha512@openssh.com", "curve25519-sha256", "curve25519-sha256@libssh.org", "ecdh-sha2-nistp256", "ecdh-sha2-nistp384", "ecdh-sha2-nistp521", "diffie-hellman-group-exchange-sha256", "diffie-hellman-group16-sha512", "diffie-hellman-group18-sha512", "diffie-hellman-group14-sha256" ], "casignaturealgorithms": [ "ssh-ed25519", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "rsa-sha2-512", "rsa-sha2-256" ], "loglevel": "INFO", "macs": [ "umac-64-etm@openssh.com", "umac-128-etm@openssh.com", "hmac-sha2-256-etm@openssh.com", "hmac-sha2-512-etm@openssh.com", "hmac-sha1-etm@openssh.com", "umac-64@openssh.com", "umac-128@openssh.com", "hmac-sha2-256", "hmac-sha2-512", "hmac-sha1" ], "securitykeyprovider": "$SSH_SK_PROVIDER", "pubkeyacceptedalgorithms": [ "ssh-ed25519-cert-v01@openssh.com", "ecdsa-sha2-nistp256-cert-v01@openssh.com", "ecdsa-sha2-nistp384-cert-v01@openssh.com", "ecdsa-sha2-nistp521-cert-v01@openssh.com", "rsa-sha2-512-cert-v01@openssh.com", "rsa-sha2-256-cert-v01@openssh.com", "ssh-ed25519", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384", "ecdsa-sha2-nistp521", "rsa-sha2-512", "rsa-sha2-256" ], "xauthlocation": "/usr/X11R6/bin/xauth", "identityfile": [ "~/.ssh/id_rsa", "~/.ssh/id_ecdsa", "~/.ssh/id_ecdsa_sk", "~/.ssh/id_ed25519", "~/.ssh/id_ed25519_sk", "~/.ssh/id_xmss", "~/.ssh/id_dsa" ], "canonicaldomains": [ "none" ], "globalknownhostsfile": [ "/etc/ssh/ssh_known_hosts", "/etc/ssh/ssh_known_hosts2" ], "userknownhostsfile": [ "/Users/foo/.ssh/known_hosts", "/Users/foo/.ssh/known_hosts2" ], "sendenv": [ "LANG", "LC_*" ], "logverbose": [ "none" ], "permitremoteopen": [ "any" ], "addkeystoagent": "false", "forwardagent": "no", "connecttimeout": null, "tunneldevice": "any:any", "canonicalizepermittedcnames": [ "none" ], "controlpersist": "no", "escapechar": "~", "ipqos": [ "af21", "cs1" ], "rekeylimit": "0 0", "streamlocalbindmask": "0177", "syslogfacility": "USER" } ] $ cat ~/.ssh/config | jc --ssh-conf -p [ { "host": "server1", "host_list": [ "server1" ], "hostname": "server1.cyberciti.biz", "user": "nixcraft", "port": 4242, "identityfile": [ "/nfs/shared/users/nixcraft/keys/server1/id_rsa" ] }, { "host": "nas01", "host_list": [ "nas01" ], "hostname": "192.168.1.100", "user": "root", "identityfile": [ "~/.ssh/nas01.key" ] }, { "host": "aws.apache", "host_list": [ "aws.apache" ], "hostname": "1.2.3.4", "user": "wwwdata", "identityfile": [ "~/.ssh/aws.apache.key" ] }, { "host": "uk.gw.lan uk.lan", "host_list": [ "uk.gw.lan", "uk.lan" ], "hostname": "192.168.0.251", "user": "nixcraft", "proxycommand": "ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null" }, { "host": "proxyus", "host_list": [ "proxyus" ], "hostname": "vps1.cyberciti.biz", "user": "breakfree", "identityfile": [ "~/.ssh/vps1.cyberciti.biz.key" ], "localforward": [ "3128 127.0.0.1:3128" ] }, { "host": "*", "host_list": [ "*" ], "forwardagent": "no", "forwardx11": "no", "forwardx11trusted": "yes", "user": "nixcraft", "port": 22, "protocol": 2, "serveraliveinterval": 60, "serveralivecountmax": 30 } ] $ cat ~/.ssh/config | jc --ssh-conf -p -r [ { "host": "server1", "host_list": [ "server1" ], "hostname": "server1.cyberciti.biz", "user": "nixcraft", "port": "4242", "identityfile": [ "/nfs/shared/users/nixcraft/keys/server1/id_rsa" ] }, { "host": "nas01", "host_list": [ "nas01" ], "hostname": "192.168.1.100", "user": "root", "identityfile": [ "~/.ssh/nas01.key" ] }, { "host": "aws.apache", "host_list": [ "aws.apache" ], "hostname": "1.2.3.4", "user": "wwwdata", "identityfile": [ "~/.ssh/aws.apache.key" ] }, { "host": "uk.gw.lan uk.lan", "host_list": [ "uk.gw.lan", "uk.lan" ], "hostname": "192.168.0.251", "user": "nixcraft", "proxycommand": "ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null" }, { "host": "proxyus", "host_list": [ "proxyus" ], "hostname": "vps1.cyberciti.biz", "user": "breakfree", "identityfile": [ "~/.ssh/vps1.cyberciti.biz.key" ], "localforward": [ "3128 127.0.0.1:3128" ] }, { "host": "*", "host_list": [ "*" ], "forwardagent": "no", "forwardx11": "no", "forwardx11trusted": "yes", "user": "nixcraft", "port": "22", "protocol": "2", "serveraliveinterval": "60", "serveralivecountmax": "30" } ] ### parse ```python def parse(data: str, raw: bool = False, quiet: bool = False) -> List[Dict[str, Any]] ``` Main text parsing function Parameters: data: (string) text data to parse raw: (boolean) unprocessed output if True quiet: (boolean) suppress warning messages if True Returns: List of Dictionaries. Raw or processed structured data. ### Parser Information Compatibility: linux, darwin, freebsd Source: [`jc/parsers/ssh_conf.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/ssh_conf.py) Version 1.0 by Kelly Brazil (kellyjonbrazil@gmail.com)