クラウドなどを使ってたくさんのインスタンスを立てると、SSHするときに「あれIPなんだっけ?」となったりします。だいたいはWeb管理ツールなどにログインして確認するかAPIのレスポンスを調べるなどして、それを~/.ssh/configに名前とIPアドレスの対応を書くのが正攻法です。特にAWS方面ではec2sshなどの便利ツール/スクリプトが既に多くあります。
- Amazon EC2インスタンスに簡単にSSHできるようになるツールec2sshを公開しました
- ec2sshとpecoでsshログインを楽しもう
- Goで複数のAWSアカウントの全リージョンのEC2の情報をもってくるコマンドを書いた
ただ、OpenStack方面では見かけなかったので、**novassh**というツール作ってみました。IPアドレスの代わりにインスタンスにつけたネームタグ(名前)で接続することができます。
デモ
使い方
OpenStack環境か、OpenStackベースのパブリッククラウドでも動作します。以下の環境で行っています。
- Rackspace https://www.rackspace.com/
- ConoHa https://www.conoha.jp/
- 自前プライベートOpenStack環境(version Liberty)
1. novasshのインストール
GitHub releaseからバイナリをダウンロードして使います。以下をご覧下さい。
2. インスタンスに名前をつける
インスタンス名の付け方は以下のような感じで。
自前OpenStack(Horizon)の場合はInstance Name
インスタンス起動ダイアログの「Instance Name」で指定します
ConoHaの場合
サーバー作成画面にある「ネームタグ」で指定します。
Rackspaceの場合
Create Serverダイアログにある「Server Name」で指定します。
3. 認証情報の設定
環境変数にOpenStackの認証情報を設定します。
export OS_USERNAME=[username]
export OS_PASSWORD=[password]
export OS_TENANT_NAME=[tenant name]
export OS_AUTH_URL=[identity endpoint]
export OS_REGION_NAME=[region]
この環境変数名は、オフィシャルのCLIツールなどでも使われていてオープンスタッカー御用達です :)
https://wiki.openstack.org/wiki/OpenStackClient/Authentication
4. インスタンスに接続する
novasshの基本的な使い方は、以下のようにインスタンス名を引数に渡すだけです。
novassh [instance-name]
基本的にsshコマンドのラッパーなので、ユーザー名の指定やオプションの指定なども同じようにできます。
novassh username@instance-name
ポートフォワードする場合
novassh -L 8080:internal-host:8080 username@instance-name
その後接続が確立したら通常のsshと同じように使うだけです。
4-2. シリアルコンソール接続を使う
OpenStack NovaはバージョンJunoからインスタンスへのシリアルコンソール接続をサポートしています。コンソール接続は仮想マシンのシリアルコンソール端末に直接接続されるため、インスタンスをリブートしても接続が切れたりせず、OSのブートシーケンスなども確認することができます。カーネルをいじったりするときに便利です。
使い方は--console
オプションをつけるだけですが、OS側でシリアルコンソールが有効になっている必要があります(最近のUbuntuやCentOSはデフォルトで無効になっています)。
お試しするならConoHaを使うのが良いと思います。RackspaceはOpenStackのレベルで無効になっていました。
novassh --console [instance-name]
接続に成功すると、以下のようにOSのログインプロンプトなどが表示されます。接続を切る場合はCtrl+[ q
と入力します。
# novassh --console ubuntu-dev
Connected.
Type "Ctrl+[ q" to disconnect.
接続を切る場合は Ctrl+[ q と入力して下さい
Ubuntu 15.10 personal ttyS0
ubuntu login:
参考: お名前.comのVPSのUbuntu14.04でシリアルコンソールを有効化する
ソースとか
ソースコードはGitHubにあります。