目標
我試圖自動化幾十個路由器的fortigate配置更改,我沒有贏。已經嘗試了Python的paramiko庫,Python結構和Perl的期望以及Rex接口/庫。Fortigate自動化與perl或python
其他信息
*路由器:飛塔60D
*固件:V5.0,build0252(GA補丁5)
啓用* SSH:真
我可以登錄通過SSH和運行這些手動命令!
我在過去使用Fortinet 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 0 Fortigate #
的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 /面料:
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
手段, 「我不知道這個命令[在這方面]」。這個命令可以在第一次提示時手動運行。另外,正如您在面料和rex示例中所看到的那樣:確實驗證並連接!我的結論是,這是出於安全原因而設計的......並且更可能出售他們專有的管理廢話。
您可能會受到[此處]描述的問題的影響(https://metacpan.org/pod/Net::OpenSSH#FAQ)! – salva