Запретить автоматизацию с помощью Perl или Python

Цель
Я пытаюсь автоматизировать автоматическое изменение конфигурации для нескольких десятков маршрутизаторов и не выигрываю. Испытал библиотеку Paramiko в Python, Python Fabric и Perl, а также интерфейсы и библиотеки Rex.

Другая информация
* Маршрутизаторы: Fortigate 60D
* Прошивка: v5.0, build0252 (GA Patch 5)
* SSH включен: True

Я могу войти через SSH и запустить эти команды вручную!

В прошлом я использовал библиотеку Perl Expect для Fortigate 60B, но она больше не работает. Прежде чем поделиться кодом, я хочу спросить:

Есть ли какая-то новая функция в 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) - ИНФОРМАЦИЯ - Выполнение задачи: аренда
[2014-02-11 13:14:48] (30022) - ИНФОРМАЦИЯ - Подключение к 10.10.10.2 (администратор)
[2014-02-11 13:14:49] (30022) - ИНФОРМАЦИЯ - Подключен к 10.10.10.2, пытается аутентифицироваться.
Fortigate # Неизвестное действие 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] Выполнение задачи 'view_dhcp_leases'
Просмотр dhcp аренды
[10.10.10.2] run: выполнить dhcp lease-list wifi
[10.10.10.2] out: Fortigate # Неизвестное действие 0
[10.10.10.2] out: 
[10.10.10.2] out: Fortigate # 

Готово.
Отключение от 10.10.10.2... сделано.

Выводы... пока

Unknown action 0 означает "я не знаю эту команду [в этом контексте]". Эта команда может быть запущена вручную при первой подсказке. Кроме того, как вы можете видеть на примерах рекс и фабрика: он аутентифицируется и подключается! Я пришел к выводу, что это сделано по соображениям безопасности... и, скорее всего, продаст свое собственное дерьмо управления.

4 ответа

Следующий скрипт работал для меня против FortiGate (5.2.4) с Python/Paramiko:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('1.1.1.254',username='admin',password='password')
stdin, stdout, stderr=ssh.exec_command("get system status")
type(stdin)
stdout.readlines()

Энди

Это работает для меня на FortiNet Mail Appliance.

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

Если вы хотите использовать матрицу для запуска команд на fortigates, вам нужно отключить оболочку оболочки, используемую фабрикой при подключении через SSH:

from fabric.api import run

def get_sys():
   run("get sys status",shell=False)

У меня 60Б.

Пожалуйста, попробуйте запустить эту команду из терминала Linux.

Если у вас нет sshpass - вы можете установить его.

sshpass -p 'adminpassword' ssh ip_of_fw -l admin выполнить список аренды dhcp

Вы можете обновить версию ОС, а затем использовать API с P

Другие вопросы по тегам