今回は多段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]をクリックして接続を開始する。
- 表示されているプロンプトからも、接続先サーバへの接続が成功していることがわかる。
shell-session
[opc@target ~]$
3.`DISPLAY`環境変数が設定されているか確認する。正しく設定していれば、自動的に設定されているはずである。
```shell-session```
[opc@target ~]$ echo $DISPLAY
localhost:10.0
4.動作確認のためxeyesを起動する。デスクトップに以下の目玉が表示されれば成功だ。タイトルバーには接続先サーバのホスト名が表示されている。
shell-session
[opc@target ~]$ xeyes &
![mh-ssh-xeyes.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/10138dc1-3933-aaf4-70b8-e5bcdf9ef50f.png)
# 5. Xサーバが適用できないケースもある
これまでの4回で以下の3方式の手順を説明した。とくに多段ssh方式は最初の設定が複雑なこともあり、十分に浸透しているとは言えないが、覚えてしまえば簡単である。
* 踏み台なしで接続する
* 踏み台ありで接続する(連続ログイン方式)
* 踏み台ありで接続する(多段ssh方式)
### 5-1. XcXsrv/XmingなどのXサーバが有効でないケース
しかし弱点もある。次のような条件がある場合だ。
* 外部ネットワークに接続するには、オンプレミスの外部アクセス用踏み台サーバを経由する必要がある
* 外部アクセス用の踏み台サーバにXcXsrv/Xmingがインストールされていない
* 外部アクセス用の踏み台サーバには管理者権限がなく、追加のプログラムをインストールできない
XcXsrv/Xmingは事前にインストールが必要なソフトウェアなので、上記環境では利用できない。
![ssh-xserver03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266049/c6b0e93a-72cb-4f63-ef55-3c5cc869ce83.png)
**そのときでも使えるのがVNCやxrdpだ。VNCクライアントには、ファイルを置くだけで使えるものがある。またxrdpは、Windows標準のリモートデスクトップクライアントを使用するのでインストール自体が不要だ。**
それぞれの方法は1回目でリンクを紹介しているので、それを見てほしい。
# 6. まとめ
* Xサーバを利用すると、WindowsクライアントでLinux上のGUIアプリを実行できる
* VNCでも同じことはできるが、Xサーバには「使用するポートは最小限」「通信経路の暗号化」「サーバ側の設定が少ない」といった数多くの魅力がある
* Xサーバは踏み台サーバ経由でも利用できる
* 多段sshと組み合わせることで、サーバ側に秘密鍵を保存する必要がなく、クラウド環境に適している
# 7. 参考資料
* [Xming環境構築](https://cell-innovation.nig.ac.jp/surfers/R_Xming.html)
* [PuTTYでプライベートなAmazon Linuxサーバへ多段ログインしてみた](https://dev.classmethod.jp/tool/putty-private-amazon-linux-login/)
* [WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編)](https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html)
* [PuTTY User Manual](https://www.ssh.com/ssh/putty/putty-manuals/0.68/Chapter9.html)
各クラウドベンダからも以下のような資料が提供されている。最後の2つはVNCの方法である。
* [Running Graphical Applications Securely on Oracle Cloud Infrastructure(PDF)](https://cloud.oracle.com/iaas/whitepapers/run_graphical_apps_securely_on_oci.pdf)
* [Windows のデスクトップ機能を使用して RHEL 7.3 の Amazon EC2 Linux ...](https://aws.amazon.com/jp/premiumsupport/knowledge-center/connect-to-rhel-73-windows/)
* [Windows からデスクトップ機能を使用して Amazon EC2 Linux](https://aws.amazon.com/jp/premiumsupport/knowledge-center/connect-ec2-linux-windows/)