mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-07-15 01:24:29 +02:00
add ssh_conf tests
This commit is contained in:
@ -26,6 +26,9 @@ Schema:
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"host": string,
|
"host": string,
|
||||||
|
"host_list": [
|
||||||
|
string
|
||||||
|
],
|
||||||
"addkeystoagent": string,
|
"addkeystoagent": string,
|
||||||
"addressfamily": string,
|
"addressfamily": string,
|
||||||
"batchmode": string,
|
"batchmode": string,
|
||||||
@ -364,6 +367,9 @@ Examples:
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"host": "server1",
|
"host": "server1",
|
||||||
|
"host_list": [
|
||||||
|
"server1"
|
||||||
|
],
|
||||||
"hostname": "server1.cyberciti.biz",
|
"hostname": "server1.cyberciti.biz",
|
||||||
"user": "nixcraft",
|
"user": "nixcraft",
|
||||||
"port": 4242,
|
"port": 4242,
|
||||||
@ -373,6 +379,9 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "nas01",
|
"host": "nas01",
|
||||||
|
"host_list": [
|
||||||
|
"nas01"
|
||||||
|
],
|
||||||
"hostname": "192.168.1.100",
|
"hostname": "192.168.1.100",
|
||||||
"user": "root",
|
"user": "root",
|
||||||
"identityfile": [
|
"identityfile": [
|
||||||
@ -381,6 +390,9 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "aws.apache",
|
"host": "aws.apache",
|
||||||
|
"host_list": [
|
||||||
|
"aws.apache"
|
||||||
|
],
|
||||||
"hostname": "1.2.3.4",
|
"hostname": "1.2.3.4",
|
||||||
"user": "wwwdata",
|
"user": "wwwdata",
|
||||||
"identityfile": [
|
"identityfile": [
|
||||||
@ -389,12 +401,19 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "uk.gw.lan uk.lan",
|
"host": "uk.gw.lan uk.lan",
|
||||||
|
"host_list": [
|
||||||
|
"uk.gw.lan",
|
||||||
|
"uk.lan"
|
||||||
|
],
|
||||||
"hostname": "192.168.0.251",
|
"hostname": "192.168.0.251",
|
||||||
"user": "nixcraft",
|
"user": "nixcraft",
|
||||||
"proxycommand": "ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null"
|
"proxycommand": "ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "proxyus",
|
"host": "proxyus",
|
||||||
|
"host_list": [
|
||||||
|
"proxyus"
|
||||||
|
],
|
||||||
"hostname": "vps1.cyberciti.biz",
|
"hostname": "vps1.cyberciti.biz",
|
||||||
"user": "breakfree",
|
"user": "breakfree",
|
||||||
"identityfile": [
|
"identityfile": [
|
||||||
@ -406,6 +425,9 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "*",
|
"host": "*",
|
||||||
|
"host_list": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
"forwardagent": "no",
|
"forwardagent": "no",
|
||||||
"forwardx11": "no",
|
"forwardx11": "no",
|
||||||
"forwardx11trusted": "yes",
|
"forwardx11trusted": "yes",
|
||||||
@ -421,6 +443,9 @@ Examples:
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"host": "server1",
|
"host": "server1",
|
||||||
|
"host_list": [
|
||||||
|
"server1"
|
||||||
|
],
|
||||||
"hostname": "server1.cyberciti.biz",
|
"hostname": "server1.cyberciti.biz",
|
||||||
"user": "nixcraft",
|
"user": "nixcraft",
|
||||||
"port": "4242",
|
"port": "4242",
|
||||||
@ -430,6 +455,9 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "nas01",
|
"host": "nas01",
|
||||||
|
"host_list": [
|
||||||
|
"nas01"
|
||||||
|
],
|
||||||
"hostname": "192.168.1.100",
|
"hostname": "192.168.1.100",
|
||||||
"user": "root",
|
"user": "root",
|
||||||
"identityfile": [
|
"identityfile": [
|
||||||
@ -438,6 +466,9 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "aws.apache",
|
"host": "aws.apache",
|
||||||
|
"host_list": [
|
||||||
|
"aws.apache"
|
||||||
|
],
|
||||||
"hostname": "1.2.3.4",
|
"hostname": "1.2.3.4",
|
||||||
"user": "wwwdata",
|
"user": "wwwdata",
|
||||||
"identityfile": [
|
"identityfile": [
|
||||||
@ -446,12 +477,19 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "uk.gw.lan uk.lan",
|
"host": "uk.gw.lan uk.lan",
|
||||||
|
"host_list": [
|
||||||
|
"uk.gw.lan",
|
||||||
|
"uk.lan"
|
||||||
|
],
|
||||||
"hostname": "192.168.0.251",
|
"hostname": "192.168.0.251",
|
||||||
"user": "nixcraft",
|
"user": "nixcraft",
|
||||||
"proxycommand": "ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null"
|
"proxycommand": "ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "proxyus",
|
"host": "proxyus",
|
||||||
|
"host_list": [
|
||||||
|
"proxyus"
|
||||||
|
],
|
||||||
"hostname": "vps1.cyberciti.biz",
|
"hostname": "vps1.cyberciti.biz",
|
||||||
"user": "breakfree",
|
"user": "breakfree",
|
||||||
"identityfile": [
|
"identityfile": [
|
||||||
@ -463,6 +501,9 @@ Examples:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"host": "*",
|
"host": "*",
|
||||||
|
"host_list": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
"forwardagent": "no",
|
"forwardagent": "no",
|
||||||
"forwardx11": "no",
|
"forwardx11": "no",
|
||||||
"forwardx11trusted": "yes",
|
"forwardx11trusted": "yes",
|
||||||
@ -602,7 +643,12 @@ def parse(
|
|||||||
if line.strip().startswith('Host '):
|
if line.strip().startswith('Host '):
|
||||||
if host:
|
if host:
|
||||||
raw_output.append(host)
|
raw_output.append(host)
|
||||||
host = {'host': line.split()[1]}
|
|
||||||
|
hostnames = line.split(maxsplit=1)[1]
|
||||||
|
host = {
|
||||||
|
'host': hostnames,
|
||||||
|
'host_list': hostnames.split()
|
||||||
|
}
|
||||||
|
|
||||||
# support configuration file by ignoring all lines between
|
# support configuration file by ignoring all lines between
|
||||||
# Match xxx and Match any
|
# Match xxx and Match any
|
||||||
|
45
tests/fixtures/generic/ssh_config1
vendored
Normal file
45
tests/fixtures/generic/ssh_config1
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
## override as per host ##
|
||||||
|
Host server1
|
||||||
|
HostName server1.cyberciti.biz
|
||||||
|
User nixcraft
|
||||||
|
Port 4242
|
||||||
|
IdentityFile /nfs/shared/users/nixcraft/keys/server1/id_rsa
|
||||||
|
|
||||||
|
## Home nas server ##
|
||||||
|
Host nas01
|
||||||
|
HostName 192.168.1.100
|
||||||
|
User root
|
||||||
|
IdentityFile ~/.ssh/nas01.key
|
||||||
|
|
||||||
|
## Login AWS Cloud ##
|
||||||
|
Host aws.apache
|
||||||
|
HostName 1.2.3.4
|
||||||
|
User wwwdata
|
||||||
|
IdentityFile ~/.ssh/aws.apache.key
|
||||||
|
|
||||||
|
## Login to internal lan server at 192.168.0.251 via our public uk office ssh based gateway using ##
|
||||||
|
## $ ssh uk.gw.lan ##
|
||||||
|
Host 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
|
||||||
|
|
||||||
|
## Our Us Proxy Server ##
|
||||||
|
## Forward all local port 3128 traffic to port 3128 on the remote vps1.cyberciti.biz server ##
|
||||||
|
## $ ssh -f -N proxyus ##
|
||||||
|
Host proxyus
|
||||||
|
HostName vps1.cyberciti.biz
|
||||||
|
User breakfree
|
||||||
|
IdentityFile ~/.ssh/vps1.cyberciti.biz.key
|
||||||
|
LocalForward 3128 127.0.0.1:3128
|
||||||
|
|
||||||
|
### default for all ##
|
||||||
|
Host *
|
||||||
|
ForwardAgent no
|
||||||
|
ForwardX11 no
|
||||||
|
ForwardX11Trusted yes
|
||||||
|
User nixcraft
|
||||||
|
Port 22
|
||||||
|
Protocol 2
|
||||||
|
ServerAliveInterval 60
|
||||||
|
ServerAliveCountMax 30
|
1
tests/fixtures/generic/ssh_config1.json
vendored
Normal file
1
tests/fixtures/generic/ssh_config1.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[{"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}]
|
21
tests/fixtures/generic/ssh_config2
vendored
Normal file
21
tests/fixtures/generic/ssh_config2
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Host targaryen
|
||||||
|
HostName 192.168.1.10
|
||||||
|
User daenerys
|
||||||
|
Port 7654
|
||||||
|
IdentityFile ~/.ssh/targaryen.key
|
||||||
|
|
||||||
|
Host tyrell
|
||||||
|
HostName 192.168.10.20
|
||||||
|
|
||||||
|
Host martell
|
||||||
|
HostName 192.168.10.50
|
||||||
|
|
||||||
|
Host *ell
|
||||||
|
user oberyn
|
||||||
|
|
||||||
|
Host * !martell
|
||||||
|
LogLevel INFO
|
||||||
|
|
||||||
|
Host *
|
||||||
|
User root
|
||||||
|
Compression yes
|
1
tests/fixtures/generic/ssh_config2.json
vendored
Normal file
1
tests/fixtures/generic/ssh_config2.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[{"host":"targaryen","host_list":["targaryen"],"hostname":"192.168.1.10","user":"daenerys","port":7654,"identityfile":["~/.ssh/targaryen.key"]},{"host":"tyrell","host_list":["tyrell"],"hostname":"192.168.10.20"},{"host":"martell","host_list":["martell"],"hostname":"192.168.10.50"},{"host":"*ell","host_list":["*ell"],"user":"oberyn"},{"host":"* !martell","host_list":["*","!martell"],"loglevel":"INFO"},{"host":"*","host_list":["*"],"user":"root","compression":"yes"}]
|
33
tests/fixtures/generic/ssh_config3
vendored
Normal file
33
tests/fixtures/generic/ssh_config3
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
Host server1
|
||||||
|
HostName server1.cyberciti.biz
|
||||||
|
User nixcraft
|
||||||
|
Port 4242
|
||||||
|
IdentityFile /nfs/shared/users/nixcraft/keys/server1/id_rsa
|
||||||
|
|
||||||
|
## Home nas server ##
|
||||||
|
Host nas01
|
||||||
|
HostName 192.168.1.100
|
||||||
|
User root
|
||||||
|
IdentityFile ~/.ssh/nas01.key
|
||||||
|
|
||||||
|
## Login AWS Cloud ##
|
||||||
|
Host aws.apache
|
||||||
|
HostName 1.2.3.4
|
||||||
|
User wwwdata
|
||||||
|
IdentityFile ~/.ssh/aws.apache.key
|
||||||
|
|
||||||
|
## Login to internal lan server at 192.168.0.251 via our public uk office ssh based gateway using ##
|
||||||
|
## $ ssh uk.gw.lan ##
|
||||||
|
Host 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
|
||||||
|
|
||||||
|
## Our Us Proxy Server ##
|
||||||
|
## Forward all local port 3128 traffic to port 3128 on the remote vps1.cyberciti.biz server ##
|
||||||
|
## $ ssh -f -N proxyus ##
|
||||||
|
Host proxyus
|
||||||
|
HostName vps1.cyberciti.biz
|
||||||
|
User breakfree
|
||||||
|
IdentityFile ~/.ssh/vps1.cyberciti.biz.key
|
||||||
|
LocalForward 3128 127.0.0.1:3128
|
1
tests/fixtures/generic/ssh_config3.json
vendored
Normal file
1
tests/fixtures/generic/ssh_config3.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[{"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"]}]
|
105
tests/fixtures/generic/ssh_config4
vendored
Normal file
105
tests/fixtures/generic/ssh_config4
vendored
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
Host *
|
||||||
|
AddKeysToAgent ask
|
||||||
|
AddressFamily inet
|
||||||
|
BatchMode no
|
||||||
|
BindAddress 1.1.1.1
|
||||||
|
BindInterface en0
|
||||||
|
CanonicalDomains abc.com xyz.com
|
||||||
|
CanonicalizeFallbackLocal yes
|
||||||
|
CanonicalizeHostname none
|
||||||
|
CanonicalizeMaxDots 2
|
||||||
|
CanonicalizePermittedCNAMEs *.a.example.com:*.b.example.com,*.c.example.com
|
||||||
|
CASignatureAlgorithms ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com
|
||||||
|
CertificateFile ~/certificates/cert1.pem
|
||||||
|
CertificateFile ~/certificates/cert2.pem
|
||||||
|
CheckHostIP yes
|
||||||
|
Ciphers 3des-cbc,aes128-cbc,aes192-cbc
|
||||||
|
ClearAllForwardings yes
|
||||||
|
Compression yes
|
||||||
|
ConnectionAttempts 9
|
||||||
|
ConnectTimeout 30
|
||||||
|
ControlMaster ask
|
||||||
|
ControlPath none
|
||||||
|
ControlPersist yes
|
||||||
|
DynamicForward 1.1.1.1:443
|
||||||
|
EnableEscapeCommandline no
|
||||||
|
EnableSSHKeysign yes
|
||||||
|
EscapeChar none
|
||||||
|
ExitOnForwardFailure yes
|
||||||
|
FingerprintHash md5
|
||||||
|
ForkAfterAuthentication yes
|
||||||
|
ForwardAgent $mypath
|
||||||
|
ForwardX11 no
|
||||||
|
ForwardX11Timeout 500
|
||||||
|
ForwardX11Trusted yes
|
||||||
|
GatewayPorts yes
|
||||||
|
GlobalKnownHostsFile /etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2
|
||||||
|
GSSAPIAuthentication yes
|
||||||
|
GSSAPIDelegateCredentials yes
|
||||||
|
HashKnownHosts yes
|
||||||
|
HostbasedAcceptedAlgorithms ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com
|
||||||
|
HostbasedAuthentication yes
|
||||||
|
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com
|
||||||
|
HostKeyAlias foobar
|
||||||
|
Hostname localhost
|
||||||
|
IdentitiesOnly yes
|
||||||
|
IdentityAgent SSH_AUTH_SOCK
|
||||||
|
IdentityFile ~/.ssh/vps1.cyberciti.biz.key
|
||||||
|
IdentityFile ~/.ssh/vps2.cyberciti.biz.key
|
||||||
|
IgnoreUnknown helloworld
|
||||||
|
Include ~/.ssh/config-extras ~/foo/bar
|
||||||
|
Include ~/.ssh/config-extra-extras
|
||||||
|
IPQoS af11 af12
|
||||||
|
KbdInteractiveAuthentication yes
|
||||||
|
KbdInteractiveDevices bsdauth,pam,skey
|
||||||
|
KexAlgorithms +sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org
|
||||||
|
KnownHostsCommand ~/checkknownhosts
|
||||||
|
LocalCommand ~/mycommand
|
||||||
|
LocalForward 3128 127.0.0.1:3128
|
||||||
|
LocalForward 3129 127.0.0.1:3129
|
||||||
|
LogLevel INFO
|
||||||
|
LogVerbose kex.c:*:1000,*:kex_exchange_identification():*,packet.c:*
|
||||||
|
MACs ^umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com
|
||||||
|
NoHostAuthenticationForLocalhost yes
|
||||||
|
NumberOfPasswordPrompts 3
|
||||||
|
PasswordAuthentication yes
|
||||||
|
PermitLocalCommand yes
|
||||||
|
PermitRemoteOpen 1.1.1.1:443 2.2.2.2:443
|
||||||
|
PKCS11Provider ~/pkcs11provider
|
||||||
|
Port 22
|
||||||
|
PreferredAuthentications gssapi-with-mic,hostbased,publickey,keyboard-interactive,password
|
||||||
|
Protocol 2
|
||||||
|
ProxyCommand ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null
|
||||||
|
ProxyJump 1.1.1.1:22,2.2.2.2:22
|
||||||
|
ProxyUseFdpass yes
|
||||||
|
PubkeyAcceptedAlgorithms -ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com
|
||||||
|
PubkeyAuthentication unbound
|
||||||
|
RekeyLimit 4G
|
||||||
|
RemoteCommand ~/mycommand
|
||||||
|
RemoteForward 1.1.1.1:22 2.2.2.2:22
|
||||||
|
RequestTTY force
|
||||||
|
RequiredRSASize 2048
|
||||||
|
RevokedHostKeys ~/revokedkeyfile
|
||||||
|
SecurityKeyProvider ~/keyprovider
|
||||||
|
SendEnv ENV1 ENV2
|
||||||
|
SendEnv ENV3
|
||||||
|
ServerAliveCountMax 3
|
||||||
|
ServerAliveInterval 3
|
||||||
|
SessionType none
|
||||||
|
SetEnv ENV1 ENV2
|
||||||
|
SetEnv ENV3
|
||||||
|
StdinNull yes
|
||||||
|
StreamLocalBindMask 0000
|
||||||
|
StreamLocalBindUnlink yes
|
||||||
|
StrictHostKeyChecking ask
|
||||||
|
SyslogFacility USER
|
||||||
|
TCPKeepAlive yes
|
||||||
|
Tunnel ethernet
|
||||||
|
TunnelDevice tun1:tun2
|
||||||
|
UpdateHostKeys ask
|
||||||
|
User nixcraft
|
||||||
|
UserKnownHostsFile ~/.ssh/knownhosts1 ~/.ssh/knownhosts2
|
||||||
|
VerifyHostKeyDNS ask
|
||||||
|
VisualHostKey yes
|
||||||
|
XAuthLocation /usr/X11R6/bin/xauth
|
||||||
|
|
1
tests/fixtures/generic/ssh_config4.json
vendored
Normal file
1
tests/fixtures/generic/ssh_config4.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[{"host":"*","host_list":["*"],"addkeystoagent":"ask","addressfamily":"inet","batchmode":"no","bindaddress":"1.1.1.1","bindinterface":"en0","canonicaldomains":["abc.com","xyz.com"],"canonicalizefallbacklocal":"yes","canonicalizehostname":"none","canonicalizemaxdots":2,"canonicalizepermittedcnames":["*.a.example.com:*.b.example.com","*.c.example.com"],"casignaturealgorithms":["ssh-ed25519","ecdsa-sha2-nistp256","ecdsa-sha2-nistp384","ecdsa-sha2-nistp521","sk-ssh-ed25519@openssh.com"],"certificatefile":["~/certificates/cert1.pem","~/certificates/cert2.pem"],"checkhostip":"yes","ciphers":["3des-cbc","aes128-cbc","aes192-cbc"],"clearallforwardings":"yes","compression":"yes","connectionattempts":9,"connecttimeout":30,"controlmaster":"ask","controlpath":"none","controlpersist":"yes","dynamicforward":"1.1.1.1:443","enableescapecommandline":"no","enablesshkeysign":"yes","escapechar":"none","exitonforwardfailure":"yes","fingerprinthash":"md5","forkafterauthentication":"yes","forwardagent":"$mypath","forwardx11":"no","forwardx11timeout":500,"forwardx11trusted":"yes","gatewayports":"yes","globalknownhostsfile":["/etc/ssh/ssh_known_hosts","/etc/ssh/ssh_known_hosts2"],"gssapiauthentication":"yes","gssapidelegatecredentials":"yes","hashknownhosts":"yes","hostbasedacceptedalgorithms":["ssh-ed25519-cert-v01@openssh.com","ecdsa-sha2-nistp256-cert-v01@openssh.com"],"hostbasedauthentication":"yes","hostkeyalgorithms":["ssh-ed25519-cert-v01@openssh.com","ecdsa-sha2-nistp256-cert-v01@openssh.com"],"hostkeyalias":"foobar","hostname":"localhost","identitiesonly":"yes","identityagent":"SSH_AUTH_SOCK","identityfile":["~/.ssh/vps1.cyberciti.biz.key","~/.ssh/vps2.cyberciti.biz.key"],"ignoreunknown":"helloworld","include":["~/.ssh/config-extras","~/foo/bar","~/.ssh/config-extra-extras"],"ipqos":["af11","af12"],"kbdinteractiveauthentication":"yes","kbdinteractivedevices":["bsdauth","pam","skey"],"kexalgorithms":["sntrup761x25519-sha512@openssh.com","curve25519-sha256","curve25519-sha256@libssh.org"],"kexalgorithms_strategy":"+","knownhostscommand":"~/checkknownhosts","localcommand":"~/mycommand","localforward":["3128 127.0.0.1:3128","3129 127.0.0.1:3129"],"loglevel":"INFO","logverbose":["kex.c:*:1000","*:kex_exchange_identification():*","packet.c:*"],"macs":["umac-64-etm@openssh.com","umac-128-etm@openssh.com","hmac-sha2-256-etm@openssh.com","hmac-sha2-512-etm@openssh.com"],"macs_strategy":"^","nohostauthenticationforlocalhost":"yes","numberofpasswordprompts":3,"passwordauthentication":"yes","permitlocalcommand":"yes","permitremoteopen":["1.1.1.1:443","2.2.2.2:443"],"pkcs11provider":"~/pkcs11provider","port":22,"preferredauthentications":["gssapi-with-mic","hostbased","publickey","keyboard-interactive","password"],"protocol":2,"proxycommand":"ssh nixcraft@gateway.uk.cyberciti.biz nc %h %p 2> /dev/null","proxyjump":["1.1.1.1:22","2.2.2.2:22"],"proxyusefdpass":"yes","pubkeyacceptedalgorithms":["ssh-ed25519-cert-v01@openssh.com","ecdsa-sha2-nistp256-cert-v01@openssh.com"],"pubkeyacceptedalgorithms_strategy":"-","pubkeyauthentication":"unbound","rekeylimit":"4G","remotecommand":"~/mycommand","remoteforward":"1.1.1.1:22 2.2.2.2:22","requesttty":"force","requiredrsasize":2048,"revokedhostkeys":"~/revokedkeyfile","securitykeyprovider":"~/keyprovider","sendenv":["ENV1","ENV2","ENV3"],"serveralivecountmax":3,"serveraliveinterval":3,"sessiontype":"none","setenv":["ENV1","ENV2","ENV3"],"stdinnull":"yes","streamlocalbindmask":"0000","streamlocalbindunlink":"yes","stricthostkeychecking":"ask","syslogfacility":"USER","tcpkeepalive":"yes","tunnel":"ethernet","tunneldevice":"tun1:tun2","updatehostkeys":"ask","user":"nixcraft","userknownhostsfile":["~/.ssh/knownhosts1","~/.ssh/knownhosts2"],"verifyhostkeydns":"ask","visualhostkey":"yes","xauthlocation":"/usr/X11R6/bin/xauth"}]
|
14
tests/fixtures/generic/ssh_config5
vendored
Normal file
14
tests/fixtures/generic/ssh_config5
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
# comment
|
||||||
|
Host *
|
||||||
|
User something
|
||||||
|
|
||||||
|
# comment 2
|
||||||
|
Host svu
|
||||||
|
Hostname www.svuniversity.ac.in
|
||||||
|
# within-host-comment
|
||||||
|
Port 22
|
||||||
|
ProxyCommand nc -w 300 -x localhost:9050 %h %p
|
||||||
|
|
||||||
|
# another comment
|
||||||
|
# bla bla
|
1
tests/fixtures/generic/ssh_config5.json
vendored
Normal file
1
tests/fixtures/generic/ssh_config5.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[{"host":"*","host_list":["*"],"user":"something"},{"host":"svu","host_list":["svu"],"hostname":"www.svuniversity.ac.in","port":22,"proxycommand":"nc -w 300 -x localhost:9050 %h %p"}]
|
95
tests/test_ssh_conf.py
Normal file
95
tests/test_ssh_conf.py
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
import os
|
||||||
|
import unittest
|
||||||
|
import json
|
||||||
|
from typing import Dict
|
||||||
|
from jc.parsers.ssh_conf import parse
|
||||||
|
|
||||||
|
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
class MyTests(unittest.TestCase):
|
||||||
|
f_in: Dict = {}
|
||||||
|
f_json: Dict = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
fixtures = {
|
||||||
|
'ssh_config1': (
|
||||||
|
'fixtures/generic/ssh_config1',
|
||||||
|
'fixtures/generic/ssh_config1.json'),
|
||||||
|
'ssh_config2': (
|
||||||
|
'fixtures/generic/ssh_config2',
|
||||||
|
'fixtures/generic/ssh_config2.json'),
|
||||||
|
'ssh_config3': (
|
||||||
|
'fixtures/generic/ssh_config3',
|
||||||
|
'fixtures/generic/ssh_config3.json'),
|
||||||
|
'ssh_config4': (
|
||||||
|
'fixtures/generic/ssh_config4',
|
||||||
|
'fixtures/generic/ssh_config4.json'),
|
||||||
|
'ssh_config5': (
|
||||||
|
'fixtures/generic/ssh_config5',
|
||||||
|
'fixtures/generic/ssh_config5.json')
|
||||||
|
}
|
||||||
|
|
||||||
|
for file, filepaths in fixtures.items():
|
||||||
|
with open(os.path.join(THIS_DIR, filepaths[0]), 'r', encoding='utf-8') as a, \
|
||||||
|
open(os.path.join(THIS_DIR, filepaths[1]), 'r', encoding='utf-8') as b:
|
||||||
|
cls.f_in[file] = a.read()
|
||||||
|
cls.f_json[file] = json.loads(b.read())
|
||||||
|
|
||||||
|
|
||||||
|
def test_ssh_nodata(self):
|
||||||
|
"""
|
||||||
|
Test 'ssh' with no data
|
||||||
|
"""
|
||||||
|
self.assertEqual(parse('', quiet=True), [])
|
||||||
|
|
||||||
|
|
||||||
|
def test_ssh_config1(self):
|
||||||
|
"""
|
||||||
|
Test 'ssh' config 1
|
||||||
|
"""
|
||||||
|
self.assertEqual(
|
||||||
|
parse(self.f_in['ssh_config1'], quiet=True),
|
||||||
|
self.f_json['ssh_config1']
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_ssh_config2(self):
|
||||||
|
"""
|
||||||
|
Test 'ssh' config 2
|
||||||
|
"""
|
||||||
|
self.assertEqual(
|
||||||
|
parse(self.f_in['ssh_config2'], quiet=True),
|
||||||
|
self.f_json['ssh_config2']
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_ssh_config3(self):
|
||||||
|
"""
|
||||||
|
Test 'ssh' config 3
|
||||||
|
"""
|
||||||
|
self.assertEqual(
|
||||||
|
parse(self.f_in['ssh_config3'], quiet=True),
|
||||||
|
self.f_json['ssh_config3']
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_ssh_config4(self):
|
||||||
|
"""
|
||||||
|
Test 'ssh' config 4
|
||||||
|
"""
|
||||||
|
self.assertEqual(
|
||||||
|
parse(self.f_in['ssh_config4'], quiet=True),
|
||||||
|
self.f_json['ssh_config4']
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_ssh_config5(self):
|
||||||
|
"""
|
||||||
|
Test 'ssh' config 5
|
||||||
|
"""
|
||||||
|
self.assertEqual(
|
||||||
|
parse(self.f_in['ssh_config5'], quiet=True),
|
||||||
|
self.f_json['ssh_config5']
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
Reference in New Issue
Block a user