Contents
xSSHとは?
xSSHはLinuxで動作するインフラエンジニア向けのログ取得ツールです。
JSON形式の設定ファイルを使ってネットワーク機器やサーバーのログを取得します。大量の機器でも効率良くログを取得できるように並行処理を取り入れていますが、Communityエディションは同時に2接続に制限しています(PersonalエディションとProfessionalエディションは制限なし)。
動作環境とダウンロード
xSSHはコンパイル済みファイルでの提供となり、現在はGNU Linux(amd64)向けのみ提供しています。
xssh-community-linux_amd64_v1.1
Professionalエディションについては以下のページをご覧ください。
https://netwiz.co.jp/xssh-professional/
xSSHを使うメリット
インフラエンジニアがログ取得に使うツールの代表格と言えばTera Termマクロだと思います。
Tera Termマクロは非常に簡単に開発できて便利なのですが、同時に多数の機器にログインしてログを取得しようとするとフリーズしたりログが正常に取得でいないなどの問題が発生することが多々あります。また、特定の文字列を受信するまで待ち受けるというexpectのような使い方をすることが多く、プロンプトを誤検知して正常にログが取得できない場合があるという問題がありました。
xSSHは特定の文字列を待ち受けるのではなく、受信データはすべて取得する仕様です。そのためログが途中で途切れるという心配はありません。また、同時に複数台の機器へログインするため非常に高速です。
その他のメリットはFortigateのVDOMやA10のパーティション、Ciscoのenableモード、SRXのシェルモード・オペレーションモード・コンフィグレーションモードに対応している点です(後述)。
使い方
いくつかのオプションがありますが、-config
オプションでコンフィグファイル名を指定するだけで実行できます。
$ xssh -config target.json
実行すると~/xssh/YYYYMMDD
にログを保存します。拡張子は付かないので、拡張子を付けたい場合は-suffix
オプションを使います。
$ xssh -config target.json -suffix .log
ログファイルの先頭に文字列を付加したい場合、-prefix
オプションを使います。作業前と作業後でログファイル名を分けるとき「before-」「after-」のような文字列をログファイル名に付けたい場合に使います。
$ xssh -config target.json -prefix before-
ログディレクトリのデフォルトは~/xssh/YYYYMMDD
ですが、変更したい場合は-logdir
オプションを使います。
$ xssh -config target.json -logdir /path/to/dir
ログディレクトリを毎回オプションで指定することが面倒な場合は環境変数XSSH_LOGDIR
を設定することができます。bashをご利用の方は~/.bashrc
などで以下のように設定します。
export XSSH_LOGDIR=/path/to/dir
ログ出力を詳細にしたい場合は-v
オプションを使います。これは好みの問題です。
$ xssh -config target.json -v
実行すると次のようにログを取得します(Communityエディションなので同時接続数が2台に制限されています)。
$ ./xssh-community-linux_amd64 -config ~/target.json xSSH version 1.00 Community Max Proccess: 2 Connection limit: 2 Target: 7 hosts Log directory: /tmp/xxx Config file: /home/shj/target.json ------------------------------------------------------------------------------- 2023/12/10 11:03:39 [Fail]192.168.218.128: dial tcp 192.168.218.128:22: connect: no route to host 2023/12/10 11:03:40 192.168.0.123: Login successful 2023/12/10 11:03:46 [Fail]10.0.0.1: dial tcp 10.0.0.1:22: i/o timeout 2023/12/10 11:03:46 192.168.0.124: Login successful 2023/12/10 11:03:58 192.168.0.123: Done 2023/12/10 11:03:59 192.168.0.124: Done 2023/12/10 11:03:59 192.168.0.48: Login successful 2023/12/10 11:04:09 [Fail]devspace: dial tcp 192.168.0.107:22: i/o timeout 2023/12/10 11:04:09 192.168.0.3: Login successful 2023/12/10 11:04:21 192.168.0.48: Done 2023/12/10 11:04:21 192.168.0.3: Done ------------------------------------------------------------------------------- 44.39 seconds in proccess $
Professionalエディションでは次のようにすべての機器へ同時にログインしているため、Communityエディションと比較すると高速です。
$ ./xssh-pro-linux_amd64 -config ~/target.json xSSH version 1.00 Professional Max Proccess: 8 Connection limit: 7 Target: 7 hosts Log directory: /tmp/xxx Config file: /home/shj/target.json ------------------------------------------------------------------------------- 2023/12/10 11:05:09 192.168.0.3: Login successful 2023/12/10 11:05:09 192.168.0.124: Login successful 2023/12/10 11:05:10 192.168.0.48: Login successful 2023/12/10 11:05:10 192.168.0.123: Login successful 2023/12/10 11:05:12 [Fail]192.168.218.128: dial tcp 192.168.218.128:22: connect: no route to host 2023/12/10 11:05:19 [Fail]10.0.0.1: dial tcp 10.0.0.1:22: i/o timeout 2023/12/10 11:05:19 [Fail]devspace: dial tcp 192.168.0.107:22: i/o timeout 2023/12/10 11:05:21 192.168.0.124: Done 2023/12/10 11:05:22 192.168.0.3: Done 2023/12/10 11:05:28 192.168.0.123: Done 2023/12/10 11:05:28 192.168.0.48: Done ------------------------------------------------------------------------------- 18.94 seconds in proccess $
Professionalエディションの同時接続数の上限値はデフォルトでは論理CPU数(スレッド数)x 5です。たとえば4コア8スレッドのCPUを利用している場合は同時接続数が最大で40になります。同時接続数の上限値を増やしたり減らしたりしたい場合は後述するglobal
設定で変更します。
設定ファイルを作成する
設定ファイルはJSON形式です。設定は大きく分けるとglobal
(グローバル設定)とtargets
(個々の接続先設定)の2つあります。
最小限の設定例
細かい設定方法を解説する前に必要最小限の設定例を掲載します。
最低でも次のようなコンフィグになります。type
を指定しないので、type
はcommon
になります。
{ "targets": [ { "host": "192.168.0.1", "user": "foo", "password": "passw@rd", "shell": { "command": [ "command1" ] } } ] }
このコンフィグを使うと、192.168.0.1にSSHログインして「comand1」を実行します。ログイン時のユーザーは「foo」でパスワードは「passw@rd」となります。
ログファイルはhost
で設定している「192.168.0.1」になります。ログファイル名を変更したい場合はlogfile
で指定します。次の例では「example.com」というファイル名でログが保存されます。
{ "targets": [ { "host": "192.168.0.1", "user": "foo", "password": "passw@rd", "shell": { "command": [ "command1" ] }, "logfile": "example.com" } ] }
global(グローバル設定)
グローバル設定は全体的な設定をおこないたい場合に使います。この設定は実行時のオプションや個々の接続設定で上書きされる場合があります。
{ "global": { "connection_limit": 0, "log_suffix": "", "log_prefix": "", "ssh_timeout": 5, "logdir": "" }, "targets": [ {
設定の説明は以下のとおりです。connection_limit
については、Communityエディションでは最大値が2に制限されます。
設定名 | 種類 | 設定の説明 | デフォルト値 |
---|---|---|---|
connection_limit | int | 同時接続数の最大値 | 論理CPU数 x 5 |
log_suffix | string | ログファイル拡張子 | (空) |
log_prefix | string | ファイル名のプレフィックス | (空) |
ssh_timeout | int | SSHログインが完了するまでのタイムアウト値(秒) | 5 |
logdir | string | ログディレクトリ | $HOME/xssh/日付 |
targets(個々の接続設定)共通設定
個々の接続設定は、ベースとなる共通部分と接続先のタイプによって変わる設定があります。すべての接続設定で共通なのは以下の設定です。
{ "targets": [ { "type": "common", "host": "", "logfile": "", "ssh_timeout": 5, "auth_method": "password", "user": "", "password": "", "key": { "file": "", "passphrase": "" } } ] }
設定の説明は以下のとおりです。
設定名 | 値の種類 | 設定の説明 | 初期値 |
---|---|---|---|
type | string | cisco / bigip / a10 / fortigate / srxを指定すると、各機器に応じた設定ができます。それ以外の機器では自由にホストタイプを指定でき、未指定の場合はcommonとなります。 | common |
host | string | 接続先のホスト名もしくはIPアドレス | (空) |
port | int | SSHの接続ポートが22番でない場合に指定します | 22 |
logfile | string | 未指定の場合はhost で指定したホスト名/IPアドレスがファイル名になります | 「host」の指定値 |
ssh_timeout | int | SSHログインが完了するまでの待ち時間(秒) | 5 |
auth_method | string | 認証方式を指定します password / passwd … パスワード認証 publickey / pubkey / key … 公開鍵認証 keyboard-interactive / challenge-response / challenge … キーボードインタラクティブ認証(チャレンジレスポンス) デフォルトは password です | password |
user | string | ログインユーザー名を指定します | (空) |
password | string | ログインパスワードを指定します | (空) |
key/file | string | 秘密鍵のフィアルパス | (空) |
key/passphrase | string | 秘密鍵のパスフレーズ | (空) |
targets(個々の接続設定)タイプ別設定
type
を設定することによって機器の特性に合わせた挙動をさせることができます。利用できるtype
は以下のとおりです。
type | 機能 |
---|---|
common | ・SSHログインしてコマンドを実行できる(デフォルト) |
cisco | ・enableモードに切り替えてコマンドを実行できる ・自動的に「terminal length 0」「terminal width 0」を実行する |
bigip | ・認証方式を指定していない場合、自動的にキーボードインタラクティブ認証を実行する ・tmshモードに切り替えてコマンドを実行できる |
fortigate | ・vdomを切り替えてコマンドを実行できる ・globalモードに切り替えてコマンドを実行できる |
a10 | ・enableモードに切り替えてコマンドを実行できる ・パーティションを切り替えてコマンドを実行できる |
srx | ・シェルモードに切り替えてコマンドを実行できる ・オペレーションモードに切り替えてコマンドを実行できる ・コンフィグレーションモードに切り替えてコマンドを実行できる |
vdx | ・自動的に「terminal length 0」を実行する |
Cisco機器にログインするから必ずしもtype
にcisco
を選択しなければいけない、というわけではありません。Fortigateでもtype
にcommon
を指定して、コマンドでVDOM切り替えをおこなうこともできます。
あくまでも、type
を指定するとxSSHが機種別の特定機能をサポートする、というだけです。
common
設定でtype
を指定しない場合、もしくは未知のtype
を指定した場合はcommon
となります。
common
で設定できるのはshell
のみです。
{ "targets": [ { "type": "common", "host": "", "logfile": "", "ssh_timeout": 5, "auth_method": "password", "user": "", "password": "", "key": { "file": "", "passphrase": "" }, "shell": { "command": [ "" ], "file": [ "" ] } } ] }
command
は実行させたいコマンドを直接記述します。配列なので複数指定可能です。
"command": [ "command1", "command2" ],
file
はコマンドを記述したファイルを指定します。このファイルを読み込んでコマンドを実行します。これも配列なので複数指定可能です。
"file": [ "/path/to/file", "/path/to/file2" ]
cisco
type
にcisco
を指定した場合、以下の2つの機能が追加されます。
- ログイン後に
terminal length 0
とterminal width 0
が送信される - enableモードに遷移できる
enalbeモードに遷移しない場合、type
にcisco
を指定する必要はなくcommon
で十分です。
{ "targets": [ { "type": "cisco", "host": "", "port": 22, "logfile": "", "ssh_timeout": 5, "auth_method": "password", "user": "", "password": "", "key": { "file": "", "passphrase": "" }, "cisco": { "shell": { "command": [ "" ], "file": [ "" ] }, "enable": { "password": "", "command": [ "" ], "file": [ "" ] } } } ] }
ログイン後にコマンドを実行したい場合はshell
で指定します。これだけであればtype
にcommon
を指定するのと変わりません。
ログイン後にenableモードに遷移したい場合はenable
を指定していください。password
でenable
パスワードを指定します。
command
とfile
はtyp
にcommon
を指定したときと同様にコマンドを直接記述したりコマンドファイルを指定できます。
bigip
type
にbigip
を指定した場合、以下の2つの機能が追加されます。
- ログイン方法がキーボードインタラクティブ認証に変更される(鍵認証を選択していない場合)
- TMSHに遷移できる
TMSHに遷移する必要がない場合、type
にcommon
を指定できます。その場合は認証方法を適切に設定してください。
{ "targets": [ { "type": "bigip", "host": "", "port": 22, "logfile": "", "ssh_timeout": 5, "auth_method": "", "user": "", "password": "", "key": { "file": "", "passphrase": "" }, "bigip": { "shell": { "command": [ "" ], "file": [ "" ] }, "tmsh": { "command": [ "" ], "file": [ "" ] } } } ] }
command
とfile
はtyp
にcommon
を指定したときと同様にコマンドを直接記述したりコマンドファイルを指定できます。
fortigate
type
にfortigate
を指定した場合、以下の2つの機能が追加されます。
- globalモードに遷移できる
- VDOMを切り替えることができる
事前にVDOMチェックをおこなうので、存在しないVDOMを誤って指定しても新規にVDOMが作成されることを防ぎます。VDOM切替が不要の場合、type
にcommon
を指定できます。
{ "targets": [ { "type": "fortigate", "host": "", "port": 22, "logfile": "", "ssh_timeout": 5, "auth_method": "password", "user": "", "password": "", "key": { "file": "", "passphrase": "" }, "fortigate": { "global": { "command": [ "" ], "file": [ "" ] }, "shell": { "command": [ "" ], "file": [ "" ] }, "vdom": [ { "name": "", "command": [ "" ], "file": [ "" ] } ] } } ] }
global
はglobalモードに切り替えてコマンドを実行したい場合に使います。
global
の下にあるshell
はglobalモードへの切り替えやVDOM切り替えをせずにコマンドを実行したい場合に使います。
vdom
はVDOM切り替えをしたい場合に使います。name
でVDOM名を指定してください。vdom
は配列なので複数指定できます。
"vdom": [ { "name": "", "command": [ "" ], "file": [ "" ] }, { "name": "", "command": [ "" ], "file": [ "" ] } ]
a10
type
にa10
を指定した場合、以下の2つの機能が追加されます。
- enableモードに遷移できる
- パーティションを切り替えることができる
enableモードを使わない場合やパーティションの切り替えが不要の場合、type
にcommon
を指定できます。
{ "targets": [ { "type": "a10", "host": "", "port": 22, "logfile": "", "ssh_timeout": 5, "auth_method": "password", "user": "", "password": "", "key": { "file": "", "passphrase": "" }, "a10": { "shell": { "command": [ "" ], "file": [ "" ] }, "enable": { "password": "", "command": [ "" ], "file": [ "" ] }, "partition": [ { "name": "", "command": [ "" ], "file": [ "" ] } ] } } ] }
shell
はログイン後に実行したいコマンドを指定します。これだけであればtype
にcommon
を指定した場合と変わりません。
enable
はenableモードに遷移してコマンドを実行したい場合に使います。
partition
はパーティションを切り替えてコマンドを実行したい場合に使います。name
でパーティション名を指定してください。partition
は配列なので複数指定できます。
"partition": [ { "name": "", "command": [ "" ], "file": [ "" ] }, { "name": "", "command": [ "" ], "file": [ "" ] } ]
srx
type
にsrx
をした場合、以下の3つの機能が追加されます。
- シェルモードに切り替えてコマンドを実行できる
- オペレーションモードに切り替えてコマンドを実行出来る
- コンフィグレーションモードに切り替えてコマンドを実行できる
{ "targets": [ { "type": "srx", "host": "", "port": 22, "logfile": "", "ssh_timeout": 5, "auth_method": "password", "user": "", "password": "", "key": { "file": "", "passphrase": "" }, "srx": { "shell": { "command": [ "" ], "file": [ "" ] }, "operation": { "command": [ "" ], "file": [ "" ] }, "configuration": { "command": [ "" ], "file": [ "" ] } } } ] }
shell
を使うとシェルモードに切り替えてコマンドを実行できます。
operation
を使うとオペレーションモードに切り替えてコマンドを実行できます。
configuration
を使うとコンフィグレーションモードに切り替えてコマンドを実行できます。
vdx
type
にvdx
を指定した場合、以下の機能が追加されます。
- ログイン後にtermilan length 0が送信される
{ "targets": [ { "type": "vdx", "host": "", "port": 22, "logfile": "", "ssh_timeout": 5, "auth_method": "password", "user": "", "password": "", "key": { "file": "", "passphrase": "" }, "vdx": { "command": [ "" ], "file": [ "" ] } } ] }
複数の接続先を設定する
設定のtargets
は配列です。そのため、次のように複数の接続先設定が可能です。
{ "targets": [ { "host": "192.168.0.1", "user": "foo", "password": "passw@rd", "shell": { "command": [ "command1" ] } }, { "host": "192.168.0.2", "user": "admin", "password": "passw@rd", "fortigate": { "vdom": { "name": "root", "command": [ "show" ] } } }, { "host": "192.168.0.3", "user": "admin", "password": "passw@rd", "cisco": { "enable": { "password": "secretPassw@rd", "command": [ "show run" ] } } } ] }
サポート
Professionalエディションユーザーの方は、ライセンスIDを記載の上 support@netwiz.co.jp までお問い合わせください。