【多段ログイン】踏み台経由の接続を自動化する

踏み台サーバを経由して、他のサーバへログインすることがあるかと思います。

踏み台があることによって、2回ログインする手間がかかってしまいます。

なんとか自動化できないかと調べたところ、RLoginというターミナルソフトを用いれば実装できそうだということが分かりました。

その手順をまとめます。ローカルサイトのソースはココ

環境

  • Windows 10(クライアント)
  • Amazon Linux (サーバ)

結論

結論から言うと、次のような操作が可能になります。

  • ローカルサイトにて接続先を管理
  • 踏み台サーバ経由での接続をワンクリック化
  • 接続後、自動でrootユーザに切り替え

操作感は次のようになります。

RLoginの設定

まずはRLoginの設定を行います。

RLoginはここでダウンロード可能です。

「Windows 7以降、実行プログラム(64bit) rlogin_x64.zip」といったファイルをダウンロードします。

踏み台サーバの設定

RLoginで踏み台サーバ(hoge)の登録を行います。

新規作成を行ったら、次のような画面が表示されるので、左側のタブの「サーバー」を押下し、次の赤枠を設定します。

※パスフレーズを設定している場合は適宜入力してください。

次に「プロトコル」タブを押下し、以下の設定を行います。

ポートフォワードは以下を設定します(ポート番号はなんでも良いです)。

以上で踏み台サーバの設定は完了です。

踏み台経由のサーバ接続設定

次に、踏み台経由のサーバ(hogera)の設定を行います。

※ホスト名の部分は「空白のまま」で良いです。

※パスフレーズを設定している場合は適宜入力してください。

「プロキシ設定」は、踏み台サーバのポートフォワードで設定した内容を記載します。

次に、rootユーザに自動的に切り替えるための設定を行います。

スクリプトの内容は以下のようになりますが、必要に応じて適時修正してください。

(以下の例だと、接続後「$」が表示されのを2秒待ち、表示されてたら「sudo su -」を実行する)

Document.Open();
wait(CONNECT);
sopen(OPEN_LOOK);
swait(2, "$");
sputs("sudo su -¥n");
sclose();

次に、各サーバが表示される画面で、踏み台越しのサーバ(hogera)を選択し、右クリックを押下します。

そうすると「プロトコルハンドラの登録」というようなメニューがあると思うので、特に何も編集せずに、OKを押してください。

この設定により、ブラウザで「ssh://〜〜」というリンクを押した際に、RLoginが起動するようになりました。

ローカルサイト作成

次に、ローカルサイトを作成し、そこでSSH接続の管理を行います。

「index.html」というようなファイルを作成し、次の内容を入力してください。
※GitHubにもあります

<!doctype html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <title>SSH connecter</title>
  <meta name="description" content="SSH connecter">
  <meta name="author" content="hogera">
  <!--[if lt IE 9]>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js"></script>
  <![endif]-->
</head>

<body>
  <div style="text-align: center; border: solid; max-width: 200px; margin: auto; padding: 30px;">
    <h2>IP or Host</h2>
    <form>
      <input type="text" id="host"> 
      <input type="submit" value="接続" onclick="sshConnect()">
    </form>
  </div>
  <div style="text-align:center; display: flex; justify-content: center;">
    <div style="border: solid; margin:10px; padding: 10px;">
      <h1>テスト環境</h1>
      <p>WEBサーバ</p>
      <a href="ssh://IPアドレス or ホスト名">WEB-01</a>
      <a href="ssh://IPアドレス or ホスト名">WEB-02</a>
      <a href="ssh://IPアドレス or ホスト名">WEB-03</a>
      <a href="ssh://IPアドレス or ホスト名">WEB-04</a>
      <p>APサーバ</p>
      <a href="ssh://IPアドレス or ホスト名">AP-01</a>
      <a href="ssh://IPアドレス or ホスト名">AP-02</a>
      <a href="ssh://IPアドレス or ホスト名">AP-03</a>
      <a href="ssh://IPアドレス or ホスト名">AP-04</a>
      <p>DBサーバ</p>
      <a href="ssh://IPアドレス or ホスト名">DB-01</a>
      <a href="ssh://IPアドレス or ホスト名">DB-02</a>
      <a href="ssh://IPアドレス or ホスト名">DB-03</a>
      <a href="ssh://IPアドレス or ホスト名">DB-04</a>
    </div>
    <div style="border: solid; margin:10px; padding: 10px;">
      <h1>本番環境</h1>
      <p>WEBサーバ</p>
      <a href="ssh://IPアドレス or ホスト名">WEB-01</a>
      <a href="ssh://IPアドレス or ホスト名">WEB-02</a>
      <a href="ssh://IPアドレス or ホスト名">WEB-03</a>
      <a href="ssh://IPアドレス or ホスト名">WEB-04</a>
      <p>APサーバ</p>
      <a href="ssh://IPアドレス or ホスト名">AP-01</a>
      <a href="ssh://IPアドレス or ホスト名">AP-02</a>
      <a href="ssh://IPアドレス or ホスト名">AP-03</a>
      <a href="ssh://IPアドレス or ホスト名">AP-04</a>
      <p>DBサーバ</p>
      <a href="ssh://IPアドレス or ホスト名">DB-01</a>
      <a href="ssh://IPアドレス or ホスト名">DB-02</a>
      <a href="ssh://IPアドレス or ホスト名">DB-03</a>
      <a href="ssh://IPアドレス or ホスト名">DB-04</a>
    </div>
  </div>

  <script>
    function sshConnect() {
      let host = document.getElementById("host").value;
      let ssh = "ssh://" + host;
      window.location.href = ssh;
    }
  </script>
</body>

</html>

※上記に記載の「IPアドレス or ホスト名」や「WEB-01」などは、お使いの環境に合わせて修正してください。

index.htmlをブラウザで表示すると、次のようになります。

「IP or Host」のところでは、IP指定やホスト名指定で自由に接続できるようになっています。

他の「WEB-01」などをクリックすれば、自動でRLoginが起動し、踏み台越しに接続され、自動でrootユーザに切り替わります。

以上で、踏み台経由のサーバ接続の自動化は完了です。

その他、便利な設定

  • ログの自動取得(この記事にあるように、私もLINE形式を推奨します)
  • クリップボード設定(コピペに関する設定を入れておくと便利です)