0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ansible(rawモジュール)でFotigateの"diagnose test ~"の結果を取得。なんとか出来た。

Posted at

やりたかった事

背景はひとまず横に置いておいて、
とにかくFortigateのDNSキャッシュの表示とフラッシュをAnsibleで取得&実行したかった。

ForigateのCLIでは

# キャッシュ表示
diag test application dnsproxy 7

# キャッシュフラッシュ
diag test application dnsproxy 1

で出来る事自体は分かっていたので、
「Ansibleからでも割とさくっと出来るはずだ!!」
と何の根拠も無く思っていたら、大分苦しんだ。

という事で未来の自分のためにブログ投下しておく。
(10数年ぶりのブログ投稿・・そして技術系ブログとしては人生初投稿なのでどうぞ暖かい目で)

なんとか出来たけど・・

先に申し上げますと、Ansibleというか「SSHの所でハマった話」です。

ちなみに・・・

- FortiOSコレクション(モジュール)は使ってません。(そもそもAPI経由では"diagnose test ~"系のコマンドはほとんど対応して無さそうだったので) 
- FortigateはAWS上の公式AMI OS Ver 7.4.0
- Ansible側のOSはRHEL9系
です。

ハマったこと

上記の通り、”FortiOSモジュール以外の何か”の方法で実装しようとしました。

なのでFortiOSコレクションのFAQに書いてある、
"rawモジュール×ssh(sshpass)"
の方法で試した所、上手く行きませんでした・・・

なにが上手く行かないかっていうと、-vvvとかで見てもコマンドの実行結果が表示されない。。。

一旦Ansibleは置いといて、rawモジュールで実行した内容(sshpass -p~ diagnose test ~)をOSのターミナルから直接実行しても、
実行結果が表示されない・・・
なんだとーー!!!
(当然、普通に手動でsshしてから、Fortigate上で実行すると表示される)
そして、(sshpass -p~ 何か他のコマンド)だと普通に表示される!!

詰んだ・・・・

と思って諦め・・・
・・
・・
・・
無い!!悔しい!!
と、思っていると
Fortinetコミュニティサイトに、
Configuration Example: FortiGate remote monitoring and logging CLI command output into a file
なる投稿を発見。んん?なんかdiag系コマンドをsh化して実行してるぞ?しかもssh(sshpass)もつかってるぞ?コレなんじゃないか?

と、いう事で、コレでした!

ポイントとしては下記↓

  • -t オプションを(二回)使ってSSHする

結局のところ

diag test application dnsproxy 7

は、

diag test application dnsproxy
の後に、、表示される選択肢(オプション)の内、 7 を選択している、

1. Clear DNS cache
2. Show stats
3. Dump DNS setting
4. Reload FQDN
5. Requery FQDN
6. Dump FQDN
7. Dump DNS cache
8. Dump DNS DB
9. Reload DNS DB
10. Dump secure DNS policy/profile
11. Dump Botnet domain
12. Reload Secure DNS setting
13. Show Hostname cache
14. Clear Hostname cache
15. Show SDNS rating cache
16. Clear SDNS rating cache
17. DNS debug bit mask
99. Restart dnsproxy worker

「対話的な操作(疑似端末)が必要になるコマンドだった」
という事だと思っています。多分。

後は、FAQに乗っている書き方より、上記Forinetコミュニティサイトのように、

  • 実行したいコマンドを予め別ファイルで用意する(ex: ./Script/script-fg-spm.sh)
    ※特定の1コマンドとかで良いならファイル化しなくても echo "XXXX" | って感じで渡せばOK
  • ファイル名 | ssh でコマンドを実行させる

した方が柔軟&汎用性があるかなと思います。

実際のシェル&Playbookはこんな感じ↓↓

./Script/script-fg-spm.sh
#! /bin/bash
        sleep 1
        echo exec time
        sleep 1
        echo diagnose test application dnsproxy 7
        sleep 1
        echo exit
#End of Script
Playbookのtasks
- name: Execute The Debug Test Commands
  ansible.builtin.raw: |
    (./Script/script-fg-spm.sh) | sshpass -p "password" ssh -t -t -o StrictHostKeyChecking=no admin@10.1.1.151 > dnscache_and_time.txt
  args:
    executable: /bin/bash

最後に

フィジビリティチェックって大事。。。

以上です。
Fortigateは大分好きなので今後もハマって行きたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?