我是python新手。
我正在尝试连接到Palo Alto Networks防火墙以执行一些命令并使用Paramiko获得输出。我只是想尝试一下如何工作的简单脚本如下:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('1.1.1.1', port=22, username='admin', password='password')
stdin, stdout, stderr = ssh.exec_command('show interface all')
output = stdout.readlines()
我发现脚本在执行后挂起,因此在IDLE中尝试了相同的操作,并看到在我执行“ output = stdout.readlines()”后外壳挂起。我还尝试了以下一些配置命令,但防火墙上没有任何反应-例如在这种情况下,它不会更改防火墙主机名:
stdin, stdout, stderr = ssh.exec_command('configure')
stdin, stdout, stderr = ssh.exec_command('set deviceconfig system hostname FW1')
stdin, stdout, stderr = ssh.exec_command('commit')
如果在Linux机器上使用相同的脚本,效果很好(例如ls -l),并在一秒钟内提供输出,但在某种程度上在Palo Alto Networks防火墙上不起作用。我在youtube上看了几段视频,人们可以使用此脚本成功配置和管理Cisco路由器,但在我看来,它不起作用。有关信息,这是当我手动登录防火墙时发生的情况:
machine1:SSH user1$ ssh admin@1.1.1.1
Password:
Last login: Tue Dec 11 15:39:08 2018 from 1.1.1.2
This firewall is for authorized use only. Legal action will be taken against unauthorized users.
Number of failed attempts since last successful login: 0
admin@PA-VM>
我会很感谢您对此的一些想法和帮助。谢谢。
答案 0 :(得分:1)
使用Paramiko使用PA的SSH CLI并不容易。但是您可以尝试以下操作:
ssh_client = SSHClient()
ssh_client.set_missing_host_key_policy(AutoAddPolicy())
ssh_client.connect(
host,
username=username,
password=pwd
)
(
ssh_stdin,
ssh_stdout,
ssh_stderr
) = ssh_client.exec_command(' ')
ssh_stdin.channel.send('show interface all')
ssh_stdin.channel.shutdown_write()
resp = ssh_stdout.read().decode('utf_8').split('\n')
print(resp)
ssh_client.close()