2015年10月17日土曜日

RLogin ターミナルソフトを使用した、ポートフォワーディングによる踏み台サーバ越しの、多段 SSH 接続設定方法について

RLogin (http://nanno.dip.jp/softlib/man/rlogin/)というターミナルソフトを利用して、踏み台サーバーを越える、多段 SSH 接続方法を備忘録として残しておく。

無知ゆえに、多段 SSH 接続設定を、すっきりできずに悶々としていたが、やっとそれらしい設定方法が分かった。

ただし、私自身がよく分かっていないため、正しい設定方法かどうかは不明。よって、自己責任でどうぞ。

今回の環境は、AWS の VPC 上に環境があり、パブリック IP が付与されているサーバは、踏み台のみで、他のサーバは、プライベート IP のみとする。

踏み台サーバ IP:1.2.3.4
プライベートサーバ:10.0.0.1

RLogin の接続設定は、2つ作成する。
1つは、ローカルマシンで SOCKS プロキシとして動作する設定。
もう1つは、上記プロキシ経由で、目的のプライベート IP マシンへ接続する設定。


では、設定方法の説明をする。

踏み台サーバ接続設定


サーバ設定を新規追加。


エントリー名:「aws_bastion」
Server Address:「1.2.3.4」
Socket Port:「ssh(22)」
User Name:「ec2-user」
SSH Identity Key の参照ボタンを押下し、踏み台サーバへログインするための秘密鍵を設定する。


左のツリーから「プロトコル」を選択
「ポートフォワードだけ行う」をチェック
「エージェント転送を有効にする」をチェック


「ポートフォワード」ボタンを押下


「新規」ボタンを押下


Listened の「Local Socks」を選択
Host Name:「localhost」
Port:「10022」

「OK」ボタン押下
「閉じる」ボタン押下
「OK」ボタン押下
で、踏み台サーバへの接続設定は完了。




プライベートサーバ接続設定


サーバ設定を新規追加。

エントリー名:「aws_private」
前接続先:「aws_bastion」
  ※ 前接続先は、この接続を行うときに、自動的に指定した接続が行われる設定。
Server Address:「10.0.0.1」
Socket Port:「ssh(22)」
User Name:「ec2-user」
SSH Identity Key の参照ボタンを押下し、踏み台サーバへログインするための秘密鍵を設定す


「Proxy Server」の「設定」ボタンを押下
Select Proxy Protocol :「SOCKS5」
Over SSL :「使用しない」
Server Option
  Proxy Server Address:「localhost」
  Socket Port:「10022」  ※踏み台サーバのポートフォワード設定で指定したポート

「OK」ボタン押下
左側のツリーでプロトコルを選択
「エージェント転送を有効にする」をチェック

「OK」ボタン押下

以上で、設定完了。

aws_private を接続すると、自動的にaws_bastion の接続も行われ、無事に目的のプライベートサーバーに接続できる。



今回の設定方法以外でも、Chat Script などを使えば、多段 SSH 接続は行える。
がしかし、以下で説明する接続方法の場合に都合が良い。


  • プロトコルハンドラ経由での呼び出し
  • コマンドラインからの呼び出し

接続先ホストが異なるだけの場合、上記方法であれば、RLogin 側の設定を、増やす必要がない。
コマンドラインの場合は、もう少し自由度がある。

では、実際の接続例を記述しておく。

プロトコルハンドラでの接続

プロトコルハンドラとは、「ssh://hostname などの URL リンクで起動・接続できるようにハンドラを登録する」機能である。
HTML などで、サーバ接続 URL をリンクで作成しておけば、それをクリックすることで RLogin が起動し、サーバに接続できる。
RLogin の Server Select 画面で、「aws_private」を右クリックし、「プロトコルハンドラに登録」を選択


デフォルト値のまま、「OK」ボタンを押下

次に、HTML で接続先リンクを作成

link.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hosts</title>
</head>
<body>
  <h1>サーバ一覧</h1>
  <ul>
    <li><a href="ssh://10.0.0.1">プライベートサーバ</a></li>
  </ul>
</body>
</html>



Chrome などで、link.html ファイルを表示して、サーバのリンクをクリックすると、ダイアログが表示されるので、「アプリケーションの起動」をクリックすると、RLogin が起動し、サーバに接続される。


コマンドラインからの呼び出し

コマンドラインからの呼び出しは、もう少し自由度がある。
プロトコルハンドラでは、RLogin で登録した設定でのみ起動できないが、コマンドラインでは、それも変更できる。

今回は、趣向を凝らし、ディレクトリ名が設定名(エントリ名)で、ファイル名がサーバ名として接続されるような、バッチファイルを作成した。
ファイルは、以下のような構成とした。

├ aws_private/
│ └ 10.0.0.1.bat
└ env.bat

env.bat は、RLogin のパスを設定している。
path D:\appli\rlogin;%PATH%

10.0.0.1.bat の内容は、全ファイル共通であり、ディレクトリ名とファイル名を解析し、RLogin に渡している。現在は、エントリ名とホストのみ設定できる。工夫しだいで、プロトコル、ユーザ、パスワードや、ポートなども渡すことが出来る。

@echo off
setlocal
call "%~dp0..\env.bat"
set HOST=%~n0
set PDIR=%~p0
call :GETENTRY "%PDIR:~0,-1%"

start /b RLogin.exe /inuse /entry %ENTRY% /ip %HOST%
goto :EOF

:GETENTRY
set ENTRY=%~n1
exit /b