gpt4 book ai didi

python - 使用 perl 或 python 加强自动化

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:12 26 4
gpt4 key购买 nike

目标
我正在尝试为几十个路由器自动执行强化配置更改,但没有成功。尝试过 Python 的 paramiko 库、Python fabric 和 Perl 的 expect 和 Rex 接口(interface)/库。

其他信息
* 路由器:Fortigate 60D
* 固件:v5.0,build0252 (GA 补丁 5)
* 启用 SSH:正确

我可以通过 SSH 登录并手动运行这些命令!

我过去在 Fortigate 60B 上使用过 perl expect 库,但它不再有效了。在我分享代码之前我想问:

Fortigate 中是否有一些新功能可以防止这种类型的自动化?

一个简单无害的测试命令[列出当前的 dhcp 租约]:

execute dhcp lease-list wifi

代码
Perl/期望:

my $timeout = 10; 

$ssh->expect($timeout, [ qr/password: /i ]);
$ssh->send("$passwd\r\n");
$ssh->expect($timeout, [ qr/#/i ]);
$ssh->send("execute dhcp lease-list wifi\r");
$ssh->expect($timeout, [ qr/#/i ]);
$ssh->send("exit\r");

$ssh->soft_close();

输出:无

Perl/雷克斯:

desc "List all dhcp leases";
task "leases", group => "forti", sub {
my $output = run "execute dhcp lease-list wifi";
say $output;
};

输出:

[2014-02-11 13:14:48] (30011) - INFO - Running task: leases[2014-02-11 13:14:48] (30022) - INFO - Connecting to 10.10.10.2 (admin)[2014-02-11 13:14:49] (30022) - INFO - Connected to 10.10.10.2, trying to authenticate.Fortigate # Unknown action 0Fortigate # 

Python/paramiko:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.10.10.2',username='fake_root',password='fake_pass')
stdin, stdout, stderr=ssh.exec_command("execute dhcp lease-list wifi")
stdout.readlines()
ssh.close()

输出:无

python / Fabric :

def view_dhcp_leases():
print("Viewing dhcp leases")
run("execute dhcp lease-list wifi")

输出:

[10.10.10.2] Executing task 'view_dhcp_leases'Viewing dhcp leases[10.10.10.2] run: execute dhcp lease-list wifi[10.10.10.2] out: Fortigate # Unknown action 0[10.10.10.2] out: [10.10.10.2] out: Fortigate # Done.Disconnecting from 10.10.10.2 ... done.

结论......到目前为止

Unknown action 0 表示“我不知道这个命令 [in this context]”。此命令可以在第一个提示符处手动运行。此外,正如您在 fabric 和 rex 示例中看到的那样:它确实 进行身份验证和连接!我的结论是,这是出于安全原因而设计的……并且更有可能出售他们专有的管理废话。

最佳答案

这对我来说适用于 FortiNet 邮件设备。

from Exscript.util.interact import Account
from Exscript.protocols import SSH2
account = Account('USERNAME', 'PASSWORD')
conn = SSH2()
conn.connect('IP')
conn.login(account)
conn.execute('COMMAND')
conn.send('exit \r')
conn.close()

https://github.com/knipknap/exscript

关于python - 使用 perl 或 python 加强自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com