ネットワークの構成上、直接サーバーにSSHログインできないことがあります。
目的のサーバーにSSHログインするために、別のサーバーを経由するので地味に面倒です。
この記事は、SSH公開鍵認証とconfigを利用して直接ログインできないサーバーにも簡単にリモートログインできる多段SSHの方法を紹介します。
SSHログインだけではなくて、SCPでファイル転送する時も手間が掛からなくなるので作業の時短に繋がります。
特にクラウドを利用するケースで役に立つと思います。
目次
直接SSHできないケース
例えば、ロードバランサーの下にプライベートIPを割り振った2台のWebサーバー設置した場合のことを考えてみましょう。
下のシステム構成表をご覧ください。
システム構成表
パブリック IP | ホスト名 | プライベート IP | 役割 |
---|---|---|---|
xxx.xxx.xxx.68 | www | 10.0.1.68 | ロードバランサー |
- | www01 | 10.0.1.1 | Webサーバー |
- | www02 | 10.0.1.2 | Webサーバー |
xxx.xxx.xxx.10 | jump01 | 10.0.0.10 | 踏み台サーバー |
「www01」「www02」にはパブリックIPを与えていません。
ロードバランサーを使う場合のWebサーバー、DBサーバーにはパブリックIPを付けないことが多いです。
踏み台サーバー経由でSSH
例えば「www01」にログインする時には、踏み台サーバーの「jump01」を経由します。
- ssh USER_NAME@jump01
- ssh USER_NAME@10.0.1.1
同時に「www02」にもログインするには、同じ工程でログインする必要があるんです。
- ssh USER_NAME@jump01
- ssh USER_NAME@10.0.1.2
同じサーバーにいくつもログインすることなんて日常的にありますし、地味に面倒というのはこういうことです。
多段SSHでログイン工程を減らす方法
少し前置きが長くなりましたが、多段接続の工程を減らす方法があります。
SSHの公開鍵認証の設定は終わっているものとして説明します。
秘密鍵の保存場所
Neo隊長はMacの「~/.ssh」の中にそれぞれのサーバーにログインするための秘密鍵を保存しています。
秘密鍵 | 鍵ペア | 保存場所 |
---|---|---|
aws-jump01.pem | jump01 | Mac |
aws-www.pem | www01 | Mac |
aws-www.pem | www02 | Mac |
本来は「www01」「www02」の秘密鍵は「jump01」に保存しそうなものですが、Macの中に保存するというのがポイントです。
システム構成図
ProxyCommandで目的サーバーにノンストップログイン
ssh -o ProxyCommand='ssh -i ~/.ssh/aws-jump01.pem -W %h:%p ec2-user@xxx.xxx.xxx.10' -i ~/.ssh/aws-www.pem ec2-user@10.0.1.1
従来のやり方は「jump01」でトランジットして、目的の「www01」にログインしていましたが、オプションのProxyCommandを使用することで一発ログインできます。
ただし、コマンドが長いので逆にログインに時間がかかる...
Macの~/.ssh/config
そこで、Macの~/.ssh/configを設定します。
ホームディレクトリの中の「.ssh」ディレクトリにcdして、
cd $HOME/.ssh
SSHのconfigをvimで編集します。
vi config
Host jump01
Hostname xxx.xxx.xxx.10
User ec2-user
IdentityFile ~/.ssh/aws-jump01.pem
Host www01
Hostname 10.0.1.1
User ec2-user
IdentityFile ~/.ssh/aws-www.pem
ProxyCommand ssh jump01 -W %h:%p
Host www02
Hostname 10.0.1.2
User ec2-user
IdentityFile ~/.ssh/aws-www.pem
ProxyCommand ssh jump01 -W %h:%p
プライベートIPにダイレクトログイン
環境に合わせた内容でconfigの編集が終わったらSSHログインしてみましょう。
ssh www01
プライベート空間サーバーへのログインが楽になると思いませんか?
多段scpでダイレクトファイル転送
実は、ファイル転送がダイレクトにできることの方がありがたかったりします。
例えばMacの中の「xxxxx.tar.bz2」を「www01」のホームディレクトリにscpするには、
scp xxxxx.tar.bz2 www01:~/
これでダイレクトにファイルを転送することができます。
多段SSHのまとめ
目的のサーバーにログインするのに踏み台を経由しなければならない時に役立つテクニックでした。
SSH公開鍵認証方式とProxyCommandオプションを使ってダイレクトにプライベート空間のサーバーにログインできるので時短になります。
秘密鍵はクライアント側に保存
ポイントは、秘密鍵を踏み台サーバーには置かないことでよりセキュアな環境を維持します。
configに設定を入れてノンストップログインを実現しましょう!!
コメント