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
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
.