私は最近、リモートの MikroTiks から取得したデータを Apache Web アプリに統合する作業を行いました。これを行う方法に関するパズルの断片を見つけたので、それらをすべてここにまとめました。
では、MikroTiks から php Apache サーバーへのデータ取得を自動化するにはどうすればよいでしょうか? (PEAR または PECL モジュールをインストールしない場合。)
私は最近、リモートの MikroTiks から取得したデータを Apache Web アプリに統合する作業を行いました。これを行う方法に関するパズルの断片を見つけたので、それらをすべてここにまとめました。
では、MikroTiks から php Apache サーバーへのデータ取得を自動化するにはどうすればよいでしょうか? (PEAR または PECL モジュールをインストールしない場合。)
この例は、CentOS マシンで実行されました。
MikroTik を使用すると、 RouterOS コマンドを ssh 経由で実行できます。一度に 1 つのコマンドのみが必要な場合は、次の形式で実行できます。
> ssh {user}@{mikrotik ip} '{mikrotik command}'
ssh コマンドは、 shell_execコマンドを使用して php で自動化できます。したがって、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/
次に、Apache ユーザーとして ssh-keys を作成する必要があります。
> sudo -u apache ssh-keygen -t dsa
デフォルトのファイル名で問題ありません。 パスワードを追加しないでください。ファイルが作成されたことを再確認します。
> ls
-- id_dsa
-- id_dsa.pub
ftp を使用する MikroTik に apache の ssh キーをアップロードするために、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");
STD_ERRを STD_OUT2>&1
にパイプすることです。