Add support for variable expansion in SSHConfig
(cherry picked from commit 31482a46d6
)
This commit is contained in:
parent
697524a79f
commit
6b8284640e
|
@ -21,7 +21,10 @@ L{SSHConfig}.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import fnmatch
|
import fnmatch
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
|
||||||
|
SSH_PORT=22
|
||||||
|
|
||||||
class SSHConfig (object):
|
class SSHConfig (object):
|
||||||
"""
|
"""
|
||||||
|
@ -115,18 +118,56 @@ class SSHConfig (object):
|
||||||
Return a dict of config options with expanded substitutions
|
Return a dict of config options with expanded substitutions
|
||||||
for a given hostname.
|
for a given hostname.
|
||||||
|
|
||||||
For the moment only expansion of the %h substitution in the
|
Please refer to man ssh_config(5) for the parameters that
|
||||||
hostname config is supported.
|
are replaced.
|
||||||
|
|
||||||
@param config: the config for the hostname
|
@param config: the config for the hostname
|
||||||
@type hostname: dict
|
@type hostname: dict
|
||||||
@param hostname: the hostname that the config belongs to
|
@param hostname: the hostname that the config belongs to
|
||||||
@type hostname: str
|
@type hostname: str
|
||||||
"""
|
"""
|
||||||
#TODO: Add support for expansion of all substitution parameters
|
|
||||||
#TODO: see man ssh_config(5)
|
|
||||||
if 'hostname' in config:
|
if 'hostname' in config:
|
||||||
config['hostname'] = config['hostname'].replace('%h',hostname)
|
config['hostname'] = config['hostname'].replace('%h',hostname)
|
||||||
else:
|
else:
|
||||||
config['hostname'] = hostname
|
config['hostname'] = hostname
|
||||||
|
|
||||||
|
if 'port' in config:
|
||||||
|
port = config['port']
|
||||||
|
else:
|
||||||
|
port = SSH_PORT
|
||||||
|
|
||||||
|
user = os.getenv('USER')
|
||||||
|
if 'user' in config:
|
||||||
|
remoteuser = config['user']
|
||||||
|
else:
|
||||||
|
remoteuser = user
|
||||||
|
|
||||||
|
host = socket.gethostname().split('.')[0]
|
||||||
|
fqdn = socket.getfqdn()
|
||||||
|
homedir = os.path.expanduser('~')
|
||||||
|
replacements = {'controlpath' :
|
||||||
|
[
|
||||||
|
('%h', config['hostname']),
|
||||||
|
('%l', fqdn),
|
||||||
|
('%L', host),
|
||||||
|
('%n', hostname),
|
||||||
|
('%p', port),
|
||||||
|
('%r', remoteuser),
|
||||||
|
('%u', user)
|
||||||
|
],
|
||||||
|
'identityfile' :
|
||||||
|
[
|
||||||
|
('~', homedir),
|
||||||
|
('%d', homedir),
|
||||||
|
('%h', config['hostname']),
|
||||||
|
('%l', fqdn),
|
||||||
|
('%u', user),
|
||||||
|
('%r', remoteuser)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
for k in config:
|
||||||
|
if k in replacements:
|
||||||
|
for find, replace in replacements[k]:
|
||||||
|
config[k] = config[k].replace(find, str(replace))
|
||||||
return config
|
return config
|
||||||
|
|
Loading…
Reference in New Issue