Paramiko with Juniper echos commands executed

1.1k Views Asked by At

When getting an o/p from Juniper using Paramiko, the output first shows the commands and then execute the commands. Below is the code and output

import paramiko
import getpass
password = getpass.getpass()
with open('ips.txt','r') as f:      
    ip = f.read().splitlines()
for device in ip:
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(device, port=22, username='test', password=password, look_for_keys=False, allow_agent=False)
    remote_connection = ssh_client.invoke_shell()
    remote_connection.send('set cli screen-length 500\n')
    remote_connection.send('ping 4.2.2.2 rapid\n')
    import time
    time.sleep(3)
    output = remote_connection.recv(4096)
    print(output.decode())
    with open('Backup.txt', 'a+') as f:
        f.write(output)
        f.write("\n********************\n")
    ssh_client.close()

Output is below:

Password: 
--- JUNOS  XXX built XXX
set cli screen-length 500 <---- Is it something relevant with Juniper when running python with paramiko. 
ping 4.2.2.2 rapid <-----
{master:0}
XXX> set cli screen-length 500 
Screen length set to 500

{master:0}
XXX> ping 4.2.2.2 rapid
PING 4.2.2.2 (4.2.2.2): 56 data bytes
!!!!!
--- 4.2.2.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 43.876/52.403/55.517/4.345 ms
1

There are 1 best solutions below

0
On BEST ANSWER

You are executing the commands by simulating typing them on an interactive shell terminal interface. So it's not really surprising that the terminal echoes what you "type".

To automate a command execution, do not use the shell terminal. Use SSH "exec" channel. In Paramiko that is SSHClient.exec_command.

See Python Paramiko - Run command