先日、RundeckでVulsをインストールしているリモートサーバからvulsを実行するジョブを作成したところ、scan開始時点で処理が止まってしまいそのまま10分以上たっても何も進まないことがあった。
Rundeckではリモートサーバに対して、sshコマンドから以下のように処理をしているようだ。
ssh user@server 'コマンド'
で、コンソールから同じようにコマンドを実行したのだが、やはり以下のような出力で処理が止まってしまった。
[user@server ~]# ssh vuls@vuls '/home/vuls/go/bin/vuls scan -debug -lang=ja -report-text -cve-dictionary-dbpath=/path/to/cve.sqlite3 -config=/path/to/config.toml -results-dir=/path/to/results'
vuls@vuls's password:
time="2016-12-02T15:40:03+09:00" level=info msg="Start scanning"
time="2016-12-02T15:40:03+09:00" level=info msg="config: /path/to/config.toml"
time="2016-12-02T15:40:03+09:00" level=info msg="cve-dictionary: /path/to/cve.sqlite3"
Vulsは国内で作られたOSSということでSlackのコミュニティも日本語だったのでお伺いしたところ、どうやらパイプなどから標準出力でサーバ名を渡す処理があるらしくそこで止まっているようだとのこと。 引数でサーバ名(スペース区切りで複数指定可)を渡すことで回避可能のようなので、以下のようにコマンドを実行して回避することにした。
ssh vuls@vuls '/home/vuls/go/bin/vuls scan -debug -lang=ja -report-text -cve-dictionary-dbpath=/path/to/cve.sqlite3 -config=/path/to/config.toml -results-dir=/path/to/results $(awk -F[].[] "/\[servers\./{printf \$3 \" \"}" /path/to/config.toml)'
awkでコンフィグファイルから「[servers.サーバ名]」のサーバ名だけを抽出してスペース区切りで出力させてる感じ。 修正が入るかどうかはわからないけど、ひとまずこれで回避可能なので、RundeckでリモートサーバにVulsを実行させる場合は参考にしてもらえるといいだろう。