我最近的任务是将从远程MikroTiks中提取的数据集成到一个apache web应用程序中。我找到了关于如何做到这一点的难题,我把它们全部带到了这里。
那么如何自动从MikroTiks到php apache服务器的数据检索呢? (无需安装PEAR或PECL模块。)
答案 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>&1
是pipe STD_ERR to STD_OUT。