connect to router via jumphost

40 Views Asked by At

I want to connect to a router via jumphost. I am using python. I already got router prompt but my command such as 'show interface' not submitted to the router. When I try manually using Putty, everything works fine.

-- My Notebook -----> Jumphost -----> Router

Below is my code.


import paramiko
import time

def run_ssh_commands(hostname, port, username, password, command_file_path, output_file_path, delay=2):
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:
        ssh_client.connect(hostname, port, username, password)

        with open(command_file_path, 'r') as file, open(output_file_path, 'w') as output:
            commands = file.readlines()

            for command in commands:
                # putty terminal emmulation
                stdin, stdout, stderr = ssh_client.exec_command(command, get_pty=True)

                # waiting output
                time.sleep(10)

                # read output 
                while True:
                    if stdout.channel.exit_status_ready():
                        break
                    if stdout.channel.recv_ready():
                        output_line = stdout.channel.recv(1024).decode('utf-8')
                        output.write(output_line)
                        print(output_line, end='')

    except Exception as e:
        print(f"Error happen: {e}")
    finally:
        ssh_client.close()

How to run

run_ssh_commands('xxx.xxx.xx.xxx', xxxx, 'xxxx', 'xxxx', 'C:\\p_input.txt', 'C:\\p_output.txt')

I expect to connect the router and the command (such as 'show interface') submitted to router.

0

There are 0 best solutions below