Date created: Sunday, April 30, 2023 4:51:05 PM. Last modified: Sunday, April 30, 2023 4:51:05 PM
napalm_with_ssh_tunnel.py
Use NAPALM via an SSH jumphost:
def get_device(ip_address, hostname, username, password, secret, telnet):
"""Get interfaces and config."""
ip_address = ''.join(ip_address)
ssh_config = '~/.ssh/config'
ssh_key = '~/.ssh/priv_key.pem'
driver = napalm.get_network_driver('ios')
devnull = open(os.devnull, 'w')
sys.stderr = devnull
ssh_tunnel_active = False
if telnet:
ssh_tunnel = SSHTunnelForwarder(('IP_OF_JUMPHOST', 22),
ssh_username='jump',
ssh_pkey=ssh_key,
remote_bind_address=(ip_address, 23),
local_bind_address=('127.0.0.1',
10023))
ssh_tunnel.start()
ssh_tunnel_active = True
device = driver(hostname='127.0.0.1',
username=username,
password=password,
optional_args={'dest_file_system': 'blah:',
'transport': 'telnet',
'port': 10023,
'secret': secret})
elif secret:
device = driver(hostname=ip_address,
username=username,
password=password,
optional_args={'ssh_config_file': ssh_config,
'dest_file_system': 'blah:',
'secret': secret})
else:
device = driver(hostname=ip_address,
username=username,
password=password,
optional_args={'ssh_config_file': ssh_config,
'dest_file_system': 'blah:'})
print('Connecting to ' + hostname + '...')
try:
device.open()
except (EOFError, SSHException, NetMikoTimeoutException,
NetMikoAuthenticationException) as err:
print('Unable to connect to ' + hostname + ', error was: ' + str(err))
if ssh_tunnel_active:
ssh_tunnel.stop()
if 'Authentication' in str(err):
raise AuthError('Auth failed') from err
else:
raise ConnectError('Connection failed') from err
except (ValueError) as err:
print('Unable to connect to ' + hostname + ', error was: ' + str(err))
if ssh_tunnel_active:
ssh_tunnel.stop()
raise ConnectError('Connection failed') from err
print('Connected to ' + hostname)
print('Getting interfaces...')
interfaces = device.get_interfaces()
print('Done')
print('Getting config...')
config = device.get_config(retrieve=u'running')
print('Done')
device.close()
if ssh_tunnel_active:
ssh_tunnel.stop()
return(interfaces, config) Previous page: IRRd
Next page: Netlab Notes