0

我最近的任务是将从远程 MikroTiks 提取的数据集成到一个 apache 网络应用程序中。我找到了关于如何做到这一点的零碎拼图,我把它们都放在了这里。

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

4

1 回答 1

0

这个例子是在 CentOS 机器上执行的。

MikroTik 允许通过 ssh 执行 RouterOS 命令。如果一次只需要一个命令,可以这样执行:

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

ssh 命令可以通过shell_exec命令在 php 中自动化。因此,向 MikroTik 验证 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/

现在我们需要以 apache 用户的身份创建 ssh-keys。

> sudo -u apache ssh-keygen -t dsa

默认文件名很好。 不要添加密码。仔细检查文件是否已创建。

> 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 密钥导入:

> 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

于 2015-02-05T17:41:23.017 回答