目标
我正在尝试为几十台路由器自动化fortigate配置更改,但没有成功。尝试了Python的paramiko库、Python结构和Perl的expect和Rex接口/库。
其他信息
*路由器:Fortigate 60D
*固件:v5.0,build0252(GA补丁5)
*SSH已启用:True
我可以通过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/Rex公司:
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/帕拉米科:
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
意思是,“我不知道这个命令[在这个上下文中]”。此命令可以在第一个提示下手动运行。另外,正如您在fabric和rex示例中所看到的:它可以进行身份验证和连接!我的结论是,这是出于安全考虑而设计的……而且更有可能出售他们的专有管理产品。
下面的脚本在使用Python/Paramiko的FortiGate(5.2.4)上对我有效:
安迪
我有60亿
请尝试从linux终端运行此命令。
如果你没有sshpass-你可以安装它。
sshpass-p'adminpassword'执行dhcp租约列表
这在FortiNet邮件设备上对我有效。
https://github.com/knipknap/exscript
相关问题 更多 >
编程相关推荐