如何自动从MikroTik路由器检索数据?

时间:2015-02-05 17:41:23

标签: php apache authentication ssh-keys mikrotik

我最近的任务是将从远程MikroTiks中提取的数据集成到一个apache web应用程序中。我找到了关于如何做到这一点的难题,我把它们全部带到了这里。

那么如何自动从MikroTiks到php apache服务器的数据检索呢? (无需安装PEAR或PECL模块。)

1 个答案:

答案 0 :(得分:0)

此示例在CentOS计算机上执行。

MikroTik允许RouterOS commands to be executed via ssh。如果一次只需要一个命令,则可以采用以下形式执行:

> ssh {user}@{mikrotik ip} '{mikrotik command}'

可以通过shell_exec命令在php中自动执行ssh命令。因此,向AkroTik验证Apache服务器是剩下的任务。

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-key作为apache用户。

> sudo -u apache ssh-keygen -t dsa

默认文件名很好。 Don't add a password。仔细检查文件是否已创建。

> ls
-- id_dsa
-- id_dsa.pub

我们现在将使用MikroTik的方法将apache的ssh密钥上传到使用ftp的MikroTik。如果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消息。完成对MikroTik的ssh-key导入:

> 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命令挂在此处,您可以try adding the -2 option to force protocol version 2

$ret = shell_exec ( "ssh {$read-ssh}@{$mikrotikIP} '/ip dhcp-server lease print' 2>&1");

2>&1pipe STD_ERR to STD_OUT