Недавно у меня была задача интегрировать данные, извлеченные из удаленного MikroTiks, в веб-приложение apache. Я нашел кусочки головоломки о том, как это сделать, и я собрал их всех здесь.
Так как же автоматизировать извлечение данных из MikroTiks на сервер php apache? (Без установки модулей PEAR или PECL.)
Этот пример был выполнен на машине CentOS.
MikroTik позволяет Команды RouterOS, которые будут выполняться через ssh. Если одновременно требуется только одна команда, она может быть выполнена в такой форме:
> ssh {user}@{mikrotik ip} '{mikrotik command}'
Команды SSH могут быть автоматизированы в PHP через shell_exec команда. Таким образом, аутентификация сервера Apache в MikroTik — остающаяся задача.
ssh-keys — лучший способ автоматизировать ssh-аутентификацию. У пользователя apache должна быть своя собственная пара ключей dsa. Чтобы создать это, предполагая, что это еще не существует на сервере (также предполагая, что пользователь apache фактически «apache»:
> mkdir /var/www/.ssh
> chmod 740 /var/www/.ssh
> chown apache:apache /var/www/.ssh
> cd /var/www/.ssh/
Теперь нам нужно создать ssh-ключи как пользователь apache.
> sudo -u apache ssh-keygen -t dsa
Имя файла по умолчанию в порядке. Не добавлять пароль. Дважды проверьте, что файлы были созданы.
> ls
-- id_dsa
-- id_dsa.pub
Теперь мы будем использовать метод MikroTik для загрузки ключа Apache ssh в MikroTik, который использует ftp. Если на сервере apache не установлен ftp, все, что вам нужно, это загрузить файл id_dsa.pub в свой MikroTik, вы можете использовать сторонний компьютер для загрузки файла.
> cd /var/www/.ssh
> ftp {mikrotik ip}
name: {admin}
Password: {password}
ftp> put id_dsa.pub
ftp> exit
Вам нужно будет пройти аутентификацию на предыдущем шаге ftp. В случае успеха вы должны получить обратно 226 ASCII transfer complete
сообщение. Чтобы завершить импорт ssh-ключа в MikroTik:
> ssh {admin}@{mikrotik ip}
Вы, вероятно, захотите добавить пользователя для использования ssh.
[admin@mikrotik]>/user add
name: {read-ssh}
group: {read}
Теперь импортируйте файл ключей ssh.
[admin@mikrotik]> /user ssh-keys import public-key-file=id_dsa.pub
user: {read-ssh}
[admin@mikrotik]> /quit
Теперь мы можем проверить, что apache может автоматически подключаться к MikroTik.
sudo -u apache ssh {read-ssh}@{mikrotik ip} 'log print'
Если это работает, вы готовы использовать php для извлечения данных из вашего MikroTik. Если команда ssh висит здесь, вы можете попробуйте добавить -2
возможность принудительно установить протокол версии 2.
$ret = shell_exec ( "ssh {$read-ssh}@{$mikrotikIP} '/ip dhcp-server lease print' 2>&1");
2>&1
это к труба STD_ERR к STD_OUT.
Других решений пока нет …