CML2を使いこなす。（その４：色々なコンソール接続）

# はじめに
前回までの記事で、`CML2`を入手して基本的な操作を行うところまで進みました。

今回はノード設定をやりやすくするために、色々なコンソール接続方法について紹介します。

- 【前】[CML2を使いこなす。（その３：ラボの作成）](https://qiita.com/sakai00kou/items/d8f24018a7fd89d54ae6)
- 【次】[CML2を使いこなす。（その５：外部との接続）](https://qiita.com/sakai00kou/items/3ed6d644935b8cb7fcb9)

# コンソール接続の種類
`CML2`では、前回の記事で紹介したノード画面の`CONSOLE`からコンソール操作する方法、`CML2`のホストにSSHでログインしてホストマシンからコンソール接続する方法、`Breakout Tool`というツールを使用して、操作クライアントをプロキシにして操作端末のターミナルから直接ノードのコンソールへアクセスする方法があります。

- ノード操作画面からのコンソール接続
- CML2ホストからのコンソール接続
- Breakout Toolを使用したコンソール接続

今回は前回紹介したノード操作画面からのコンソール接続以外の方法を紹介します。

# CML2ホストからのコンソール接続
`CML2`のホストマシンから各ノードに接続するためには、`CML2`の画面アクセス等を行っている操作クライアントから`CML2`のホストマシンにSSH接続行います。

SSH接続する際には、`CML2`の画面にアクセスする際に使用している`admin`の情報を入力します。

|アクセス情報|入力内容|
|:--|:--|
|ユーザID|admin|
|パスワード|※adminのパスワード|

SSHアクセスすると以下の様な画面が表示されます。

コマンドは9種類しかなく、ラボの各ノードへのコンソール接続操作しか行えないようになっています。

```shell:CML2へのSSHアクセス画面

****
CML2 Console Server
Copyright (c) 2020 Cisco Systems, Inc. and/or its affiliates
****

tab completion works
list available nodes and node labels / IDs with "list"
it's also possible to do a "open /lab_1/n0/0" command

consoles>
```

```shell:実行可能なコマンド一覧
consoles> help
Available commands:
(Note: you can do tab-completion)
    all         toggle all labs or only mine (needs admin permissions)
    clear       clear the screen
    exit        exit the console server
    help        this help
    labs        available lab details
    list        list all available consoles, including labels and lines
    open        open connection to a console. Example: "open /lab_1/n0/0"
    quit        exit the console server
    refresh     refresh data from controller (done after 10s automatically)
```

## CML2ホストからのコンソール接続
`labs`と入力することで作成されているラボのID、タイトルなどが確認できますが、次の`list`で必要な情報はすべて分かるのであまり実行する機会は無いかと思います。

```shell:作成されているラボの確認
consoles> labs
Lab ID                    Lab Title             Created  Nodes  Links Notes
-------------------------------------------------------------------------------
293f8f          Lab at Sun 03:15 AM 2021-03-21 03:15:57      2      0
```

`list`と入力すると、ラボID、ラボで動作中のノード名、ノードID等が確認できます。

`Lines`はコンソール接続できるポート数となり、以下のノードの場合、「0」ポートと「1」ポートの2接続できるようになっています。

コンソール接続する際には「**Lab ID**」、「**Node ID**」、「**Lines**」が必要となるため、控えておきます。

```shell:作成されているノードの確認
consoles> list
Lab ID   Node ID      Lines          Node Label                Lab Title
------------------------------------------------------------------------
293f8f        n0        0,1              iosv-0      Lab at Sun 03:15 AM
293f8f        n1        0,1              iosv-1      Lab at Sun 03:15 AM
```

コンソール接続するには`open`コマンドで接続することができ、書式は以下となります。

```shell:openコマンド書式
open /[Lab ID]/[Node ID]/[Lines]
```

上記のリストに表示されている「iosv-0」のポート0に接続する場合、以下となります。

```shell:iosv-0に接続する場合の例
open /293f8f/n0/0
```

コンソールから切断する場合は **Ctrl + ^ + ]** を同時押しすることで切断できます。

# Breakout Toolを使用したコンソール接続
`Breakout Tool`を使用したコンソール接続は、クライアント自身をプロキシにして、`Breakout Tool`から直接ノードのコンソールポートに接続する方法です。

`Breakout Tool`は`CML2`の画面の`TOOLS`にあり、`Breakout Tool`を選択することで、`Breakout Tool`のドキュメント、ダウンロードページが表示されます。

![capture_21032021_171029.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2336e420-e654-9719-4751-697a6e4b1efa.jpeg)

![capture_21032021_171426.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/695e605e-74ad-032f-17e0-f8f3f4df02f0.jpeg)

`Download`に進むと、`Linux`用、`macOS`用、`Windows`用の3つがあるので、クライアントのOSに合わせてダウンロードします。

## Breakout Toolの設定
`Breakout Tool`を使用するためには簡単な接続設定を行う必要があります。

設定にはGUI画面から行う方法と、コンフィグファイルを読み込ませる方法の2種類があるため、以下で紹介します。

## GUIでのBreakout Tool設定
先ほどダウンロードした`Breakout Tool`をオプションを付与して起動させるため、コマンドプロンプト等から操作します。

以下はWindows機から実行した場合の例です。

```powershell:Breakout_Tool設定用GUIの起動
./breakout-windows-x86_amd64.exe [-listen IPアドレス] [-port ポート番号] ui
```

実行時、ファイアウォールの警告が出力された場合は許可してください。

`listen`、`port`オプションを入力しない場合は`localhost`の`8080`ポートで`Breakout Tool`設定用のWebサーバが起動してくるため、ターミナルはそのままにしてWebブラウザから自分のローカルアドレスにアクセスします。

アクセスした際に、以下画面のようなエラーが表示されますが、無視して問題ありません。

![capture_24032021_081050.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/57a4a3c7-1ae7-fdec-047d-20a55ec57183.jpeg)

`Configuration`に移動すると以下画面のように表示されるので、以下表を参考に設定を変更します。

![capture_24032021_081518.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/1a84e9af-614d-0e14-e1d1-9f7567d45f36.jpeg)

|項目|設定|説明|
|:--|:--|:--|
|Controller address|https://[CML2ホストのアドレス]/|CML画面のURL|
|Verify TLS certificate|無効|自己証明書で使用する場合は無効|
|Populate all nodes|無効|停止中ノードの表示有無|
|Username|admin|CML2管理画面にログインする際のユーザ名|
|Password|※パスワード|CML2管理画面にログインする際のパスワード|
|Console Start Port|9000|コンソール接続する際の開始ポート|
|VNC Start Port|5900|VNC接続する際の開始ポート|
|Listen Address|※クライアントアドレス|コンソール・VNS接続する際の待ち受けアドレス|
|UI Server Port|8080|Breakout Toolの管理画面アクセスポート番号|
|Labs Filename|labs.yaml|ラボのファイル名|

`Controller address`、`Username`、`Password`は自身の環境に合わせて設定、また、`Verify TLS certificate`はSSL証明書を独自に取得する場合以外は無効化してください。

## GUIでのラボ表示
`Breakout Tool`を使用してコンソール接続する場合、ラボのノードがどれか一台でも起動していないと画面に表示されないため、ラボのノードを何か起動しておきます。

先ほどの設定に問題がなければ「**Labs**」の設定をすることで以下の様に表示されます。

![capture_26032021_071512.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/5614da64-4f23-81d6-1484-dc97aaa84df2.jpeg)

ラボのStatus欄にあるボタンを「**ON**」にすることで該当のラボのノードにコンソール接続する準備ができるので「**ON**」にしてラボ名を選択するとラボ内のノードが以下の様に表示されるため、Statusを「**ON**」にして`TeraTerm`等で`Telnet`で接続します。

![capture_26032021_072113.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/fccc2bc4-16ca-48aa-35e4-98df3d493e12.jpeg)

![capture_26032021_072159.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/0190bc97-5c82-926e-088b-6016dde46bbf.jpeg)

## Breakout Tool起動用ショートカット作成
`Breakout Tool`を毎回コマンドプロンプト等で起動するのも面倒なのでショートカットを作成します。

「**リンク先**」の後ろに「**ui**」を付与し、「**実行時の大きさ**」を「**最小化**」とすることで、次から`Breakout Tool`を起動するときにはショートカットを叩くだけで起動することができます。

![capture_26032021_074800.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3f67e660-cd72-9062-b5dc-75252f787033.jpeg)

## コマンドでのBreakout Tool設定
GUI起動した場合と同様、コマンドプロンプト等で操作していきます。

設定の流れは先ほどのGUIと同じですが、最初に`CML2`ホストに接続するための`config.yaml`をエクスポートします。

```shell:config.yamlの出力
./breakout-windows-x86_amd64.exe config
```

実行すると同じディレクトリに以下デフォルトの`config.yaml`が出力されるため、テキストエディタで開き、先ほどのGUI設定と同様に設定します。

```yaml:config.yamlの編集
#
# breakout default configuration file
# - 'username' and 'password' for authentication
# - replace hostname 'cml-controller.cml.lab' with your IP or FQDN
# - set an empty 'listen_address' to listen globally
#
# Known environment variables:
#
# BREAKOUT_USERNAME
# BREAKOUT_PASSWORD
# BREAKOUT_CONTROLLER
# BREAKOUT_LISTEN_ADDRESS
# BREAKOUT_UI_SERVER_PORT
# BREAKOUT_CONSOLE_START_PORT
# BREAKOUT_VNC_START_PORT
# BREAKOUT_LAB_CONFIG_NAME
# BREAKOUT_POPULATE_ALL
# BREAKOUT_VERIFY_TLS
# BREAKOUT_EXTRA_LF
#

console_start_port: 9000
controller: https://cml-controller.cml.lab
extra_lf: false
lab_config_name: labs.yaml
listen_address: '[::1]'
password: cml2cml2
populate_all: false
ui_server_port: 8080
username: cml2
verify_tls: true
vnc_start_port: 5900
```

## コマンドでのラボ表示
以下コマンドで現在設定されているラボ情報が記載された`labs.yaml`を出力されます。

`labs.yaml`は先ほど作成した`config.yaml`を使って`CML2`ホストに接続して情報を取得＆`config.yaml`に書き込むため、`Breakout Tool`と`config.yaml`は同じディレクトリに配置して実行してください。

```shell:labs.yamlの出力
./breakout-windows-x86_amd64.exe init
```

```yaml:labs.yamlの編集
293f8f:
  enabled: false
  lab_description: ""
  lab_title: Lab at Sun 03:15 AM
  nodes:
    n0:
      devices:
      - enabled: true
        listen_port: 9000
        name: serial0
        running: false
        status: ""
      - enabled: false
        listen_port: 9001
        name: serial1
        running: false
        status: ""
      label: iosv-0
    n1:
      devices:
      - enabled: true
        listen_port: 9002
        name: serial0
        running: false
        status: ""
      - enabled: false
        listen_port: 9003
        name: serial1
        running: false
        status: ""
      label: iosv-1
```

`labs.yaml`のラボIDの次行（上記2行目）に記載されている`enabled`の値だけ`true`と修正しておきます。

編集が完了したら以下コマンドを実行すると`Breakout Tool`を実行できます。

接続ポートについては画面に表示されるため、先ほどと同様`Telnet`で接続します。

```shell:Breakout_Toolの実行
./breakout-windows-x86_amd64.exe run
```

```shell:Breakout_Tool実行時の表示例
System version: 2.1.2-b39
+---------+------------+---------+----------+
| NODE ID | NODE LABEL | DEVICE  | ADDRESS  |
+---------+------------+---------+----------+
| n0      | iosv-0     | serial0 | TCP/9000 |
+---------+------------+         +----------+
| n1      | iosv-1     |         | TCP/9002 |
+---------+------------+---------+----------+

Running... Press Ctrl-C to stop.
```

# おわりに
今回は初期状態でアドレス等何も設定されていない機器を操作するために必須となるコンソール接続について説明しました。

次回は外部のネットワークに接続する方法を紹介したいと思います。