今回は多段ssh
前回は踏み台サーバ利用編の1回目として「連続ログイン方式」を書いた。今回2回目として「多段ssh方式」について説明する。なお前回から続いた内容なので、4から始まる連続した段落番号をつけている。
- Windowsクライアントを使って…(1)→全体像を説明
- Windowsクライアントを使って…(2)→設定&踏み台なし接続
- Windowsクライアントを使って…(3)→踏み台あり接続Part1
4. 多段ssh方式で接続する
この方式の特徴は、Windowsクライアントから最終的な接続先サーバまで1回の操作で接続できることだ。そして最大のメリットは踏み台サーバに秘密鍵を置く必要がないことである。とくにパブリック・クラウドではありがたい。
4-1. たくさんの実現方法がある多段ssh
Windowsの場合、たとえ同じsshクライアントを使っても、多段sshにはたくさんの実現方式がある。LinuxにおけるOpenSSHとは異なり、決定的な多段sshの方法がないのが悩みどころだ。
そもそもsshクライアントがPuTTY、Tera Term、RLogin、Poderosa、Windows 10のOpenSSHとバラエティー豊かなことが、さらに複雑さを増しているのだが。
あらためて調べてみるとパスワード認証では多くの方法があるが、クラウドで一般的なssh公開鍵認証では選択肢が限られる。
そこで今回はPuTTYに含まれるPageantを使用した方法を説明する。
パスワード認証はたくさん情報があるので、そちらを見て欲しい。
4-2. Pageantとは
Pageantはssh認証のエージェントで、管理下の秘密鍵はメモリ上に保持される(Linuxのssh-agent相当)。
よく使われるケースとしては、秘密鍵に付けたパスフレーズの入力省略である。パスフレーズで保護された秘密鍵は、使うたびにパスフレーズの入力を要求される。しかしPageantを利用すると、1回パスフレーズを入力すれば、それ以降Pageantが起動している間は入力しなくてすむ。
今回はPageantが秘密鍵をメモリにロードする機能と、PuTTYの認証パラメータを転送する機能を併用して、多段sshを実現している。「連続ログイン方式」と「多段ssh方式」の違いを表したのが次の図である。
4-3. 事前準備する
事前準備としてPageantに秘密鍵を設定する。なお前回説明したサーバ側のライブラリインストールなど「1-3. 前提条件」の作業は終わっているものとする。
4-3-1. Pageantに秘密鍵を設定する方法
Pageantに秘密鍵を設定するには、いくつかの方法がある。以下のいずれの方法でもよいが、今回は2の方法を説明する。
- Pageantのショートカットをデスクトップに作成し、そこに秘密鍵をドロップする
- Pageantのショートカットをデスクトップに作成し、リンク先を「
pageant.exe 秘密鍵ファイル名
」に変更する - Pageantを起動して[Add key]で秘密鍵を追加する
4-3-2. Pageantに秘密鍵を設定する
- Pageantのショートカットをデスクトップに作成する。
C:\Program Files\PuTTY\pageant.exe
などからデスクトップにショートカットを作成する。 リンク先のテキストボックスに
pageant.exe
の後ろに1スペース開けて、秘密鍵のフルパスを記入する。このとき必ず拡張子がppkのPuTTY形式の秘密鍵を指定すること。入力が終わったら[OK]をクリックしてダイアログを終了する。
作成したショートカットをクリックしてPageantを起動する。エラーが出なければ正しく動作している可能性が高い。またパスフレーズで保護されている秘密鍵ではパスフレーズが要求される。
Pageantが起動すると右下のタスクバーに表示される。右クリックしてポップアップを表示し、[View Keys]をクリックする。
4-4. PuTTYで多段sshを設定する
PuTTYの設定では、以下2つのSessionを作成する。これまでの第2回、第3回を実行していれば1の作業は不要だ。しかし前回の手順を実施していない人もいるはずなので、復習も兼ねて説明する。
- PuTTYで踏み台サーバまでの接続を作成
- PuTTYで接続先サーバまで多段sshの接続を作成
今回想定している環境は以下のとおり。
サーバ | ホスト名 | パブリックIP | プライベートIP |
---|---|---|---|
踏み台サーバ | bastion | あり(132.x.x.x) | あり |
接続先サーバ | target | なし | 10.1.0.5 |
4-4-1. PuTTYで踏み台サーバまでの接続を作成
PuTTYを起動する。[Host Name]には踏み台サーバのIPアドレスを指定する。インターネット経由でアクセスするときはパブリックIPを指定する。
左側のツリーから[Connection]-[SSH]-[Auth]を選択し、[Attempt authentication Using Pageant(Pageantを使って認証する)]にチェックを入れる。また今までは一番下の[Private key file]に秘密鍵を指定していたが、Pageantを利用しているときは省略できる。逆に設定しても構わない。
左側のツリーから[Connection]-[SSH]-[X11]を選択し、[Enable X11 Forwarding(X11フォワーディングを有効にする)]をチェックを入れる。
設定した変更を保存する。左側ツリーの[Session]に戻り設定を保存するか、タイトルバー左のPuTTYアイコンをクリックし、[Change Settings(設定の変更)]で設定を保存する。このとき保存する名前を「bastion」とする(別に何でもよい)。
4-4-2. PuTTYで接続先サーバまで多段sshの接続を作成
次に多段sshで接続先サーバ(ホスト名:target)への接続を作成する。
- 前のステップで作成した「bastion」を元に、PuTTYの新しいSessionを作成する。4-4-1.から連続で実行していないときは、既存の設定をロードする。
[Connection]-[SSH]を選択し、[Remote Command]テキストボックスには踏み台サーバで実行するコマンドを入力する。今回は接続先サーバのプライベートIPを指定するので「
ssh -X <接続先サーバ>
」と入力する。オプションは-XC
でも構わない。
[Connection]-[SSH]-[Auth]で[Allow agent forwarding(エージェントフォワーディングを認める)]にチェックを入れる。これでPageant管理下の秘密鍵が踏み台サーバに転送できるようになる。
先ほどと同じ手順で、設定した変更を保存する。今回は「bastion-mh-target」という名前でセーブする(mh = Multi Hopの略)。以上ですべての設定が終わったので、次に実際に接続する。
4-5. 接続先サーバに接続する
接続先サーバに接続し、GUIアプリ画面をWindowsクライアントまで転送する。
- PuTTYを起動し、前のセクションで作成した「bastion-mh-target」をロードする。[Open]をクリックして接続を開始する。
- 表示されているプロンプトからも、接続先サーバへの接続が成功していることがわかる。
[opc@target ~]$
3.DISPLAY
環境変数が設定されているか確認する。正しく設定していれば、自動的に設定されているはずである。
[opc@target ~]$ echo $DISPLAY
localhost:10.0
4.動作確認のためxeyesを起動する。デスクトップに以下の目玉が表示されれば成功だ。タイトルバーには接続先サーバのホスト名が表示されている。
[opc@target ~]$ xeyes &
5. Xサーバが適用できないケースもある
これまでの4回で以下の3方式の手順を説明した。とくに多段ssh方式は最初の設定が複雑なこともあり、十分に浸透しているとは言えないが、覚えてしまえば簡単である。
- 踏み台なしで接続する
- 踏み台ありで接続する(連続ログイン方式)
- 踏み台ありで接続する(多段ssh方式)
5-1. XcXsrv/XmingなどのXサーバが有効でないケース
しかし弱点もある。次のような条件がある場合だ。
- 外部ネットワークに接続するには、オンプレミスの外部アクセス用踏み台サーバを経由する必要がある
- 外部アクセス用の踏み台サーバにXcXsrv/Xmingがインストールされていない
- 外部アクセス用の踏み台サーバには管理者権限がなく、追加のプログラムをインストールできない
XcXsrv/Xmingは事前にインストールが必要なソフトウェアなので、上記環境では利用できない。
そのときでも使えるのがVNCやxrdpだ。VNCクライアントには、ファイルを置くだけで使えるものがある。またxrdpは、Windows標準のリモートデスクトップクライアントを使用するのでインストール自体が不要だ。
それぞれの方法は1回目でリンクを紹介しているので、それを見てほしい。
6. まとめ
- Xサーバを利用すると、WindowsクライアントでLinux上のGUIアプリを実行できる
- VNCでも同じことはできるが、Xサーバには「使用するポートは最小限」「通信経路の暗号化」「サーバ側の設定が少ない」といった数多くの魅力がある
- Xサーバは踏み台サーバ経由でも利用できる
- 多段sshと組み合わせることで、サーバ側に秘密鍵を保存する必要がなく、クラウド環境に適している
7. 参考資料
- Xming環境構築
- PuTTYでプライベートなAmazon Linuxサーバへ多段ログインしてみた
- WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編)
- PuTTY User Manual
各クラウドベンダからも以下のような資料が提供されている。最後の2つはVNCの方法である。