お遊び記録

最近の活動記録

FreeBSD-CURRENT を導入してみた (5) sshログイン環境を整備してみた

VirtualBox環境上特有の問題として、ホスト環境との間のクリップボード共有への要求が あります。 やはり、ホスト環境との間でコピペできてほしいのです。 また、VirtualBoxのマウスキャプチャ機能は、大きなストレスの原因です。

VirtualBoxでの標準的な解決方法は、ゲスト環境上にAdditionを導入して解決する方法です。 ただし、この方法ではX Windowデバイスドライバをすげかえて機能を実現します。 実現方法としては環境依存性も低く良い方法なのだと思うのですが、 X Windowは重い、という問題があります。 たとえばmake buildworldを掛けるときに、Xを稼働させるだけのリソースも コンパイルに振り分けられればもっと早く作業が終わるのに、と、考えてしまうわけです。

そこで考えたのが、本稿で述べる別解、sshでリモートログインする方法です。



sshリモートログイン環境の概要

Xの稼働していないFreeBSDコンソール環境では、

  1. 漢字入力/表示できない
  2. ホスト環境とコピペできない

という問題があります。

しかしながら、OS自体が漢字を扱えないわけではありません。 単純にユーザとキーボード、スクリーンを介して情報をやりとりするコンソール プログラムに、その機能が組み込まれていないだけです。 ならば、その機能が組み込まれたコンソールを使えばよいのです。 Windows上の日本語対応のputtyやteratermといった端末ソフトウェアを介して ログインしてやれば、漢字入力/表示はまったく問題ありません。 また他のWindows上のプログラムとのコピペも当然可能です。

この方式では日本語入力を手慣れたWindowsのIMEを使って行える、という利点もあります。

リモートログインを使う方法は、省資源でコンソールへの要求を満たせる方法と言えます。

以下、ホスト環境がWindows7 64bit版の場合の、sshログイン環境の構築から解説します。

ホスト環境上にputtyを導入する

puttyはWindows上で動作するsshクライアントソフトです。様々なバージョンが 公開されていますが、ここでは背景表示などの表示の美麗さとプライベートキー 定義対応など機能の秀逸さから ICE IVさんで公開されている版を使います。 上記ページから最新版をダウンロードします。 本文章執筆時では2012/02/11版が最新でした。

  1. 配布ファイルの解凍
    ダウンロードしたファイルputty-gdi-20120211.zip を解凍します。
  2. インストールディレクトリの作成
    プログラムを格納するディレクトリを作成します。

    > mkdir "C:\Program Files\putty"

  3. 必要なファイルをコピーします
    プログラムファイルをコピーします

    > cd putty-gdi-20120211\x86
    > copy *.exe "C:\Program Files\putty\"

    iniファイルをコピーします

    > cd ..\ini
    > copy *.ini "C:\Program Files\putty\"

    lngファイルをコピーします

    > cd ..\lng
    > copy *.lngi "C:\Program Files\putty\"

  4. ショートカット、スタートメニュー登録する
    起動しやすい様にputty.exeにショートカット、スタートメニュー登録などを 行っておきます。

最低限のssh接続を行う設定を行う

まずsshサーバデーモンであるsshdを起動させる設定がファイル/etc/rc.confで 行われているか確認します。以下の1行があるか調べましょう。

sshd_enable="YES"               # Run sshd.

存在していないならば、以下のコマンドを実行した上で

 # echo "sshd_enable=\"YES\"" >> /etc/rc.conf

以下のコマンドを実行します。

# /etc/rc.d/sshd start
Performing sanity check on sshd configuration.
Starting sshd.

次はゲストOSであるFreeBSD上のSSHを 母艦側でアクセス可能にします。 この手順は以下の通りです。

  1. ポートフォワーディングの設定を開始する
    VirtualBoxでポートフォワーディング設定を開始する 今、FreeBSDはNAT環境で接続していますので、 ポートフォワーディングの設定をVirtualBoxで行います。 VirtualBoxの設定画面のうち、「ネットワーク」の「高度」を表示し、 「ポートフォワーディング」をクリックします。
  2. ポートフォワーディングを設定する
    VirtualBoxポートフォワーディング設定 ここで「追加(+)」ボタンを押し、ホストポートとゲストポートに22を入力、 「OK」ボタンを押して設定を修了します。 この設定で、ホスト環境からはホスト環境自身(127.0.0.1)のtcp/22ポート に接続することで、その接続がFreeBSDのtcp/22ポートにフォワードされ、 接続できるようになります。
  3. 母艦側から接続するputtyの設定
    puttyの設定 具体的には、puttyで宛先ホスト名をlocalhostにして接続すれば、Windos ではなくFreeBSDに繋がります。

鍵ペアによる認証のみでログインするよう設定する

まず最初に以下の表をご覧下さい。

日付 回数
2012/10/10 20
2012/10/11 6
2012/10/12 1633
2012/10/13 6631
2012/10/14 2
2012/10/15 2
2012/10/16 32
2012/10/17 389

これは筆者の持つあるサーバのsshdに対して行われた1日あたりの不正侵入の 試みの件数推移です。 日に数件から数100件、時には数1000件のオーダーで攻撃が行われていることが分かります。 こうした攻撃は、脆弱なパスワードを使用している場合に成立します。 よって堅牢なパスワードを使用すればよいのですが、 堅牢なパスワードは一般に覚えにくく運用性の面で苦しいものがあります。

そこで考えられるより現実的な解は、sshの認証を旧来のユーザ名/パスワード認証 以外のものにしてしまう、というものです。そうした認証の仕組みには様々な ものがありますが、ssh標準の公開鍵認証方式は設定だけで利用できるので リーズナブルです。

本節ではsshを公開鍵認証方式でのみログイン可能に設定する手順を紹介します。

公開鍵/秘密鍵ペアを作成する

公開鍵/秘密鍵はペアとなる一組のファイルです。この1組のファイルを持っている、 ということを持って、認証が成立します。従いファイルを失くしてしまうと認証が 通らなくなりますので、注意が必要です。 以下、この生成手順です。

  1. puttygenを起動する
    puttygenを起動する 公開鍵/秘密鍵のペアを作成するためには、 puttyと同じパスにインストールされたプログラム puttygenを起動します。
  2. 鍵を生成する
    puttygenによる鍵生成 ここで「生成」ボタンをクリックします。 すると、ウィンドウ上でマウスカーソル を適当に/ランダムに動かすことを求められるので、そうします。 これはマウスの動きを乱数データに使用しているのです。 十分マウスを動かすと、鍵ペアの生成に必要な乱数データが蓄積され、生成が完了 します。
  3. 鍵を保存する
    鍵の保存 ここでます、「秘密鍵の保存」をクリックします。 すると秘密鍵につけるファイル名 を聞かれるので、適切なファイル名で保存します。 ここではPandaMother-01.ppkで保存しました。 次に画面上の「OpenSSHのauthorized_keyファイルにペーストする為の公開鍵」に 表示されている公開鍵文字列をすべてコピーし、メモ帳などに張り付けて適当なファイル名、 ここではauthorized_key.txt に保存します。
  4. これで公開鍵と秘密鍵双方が生成できたことになります。

    公開鍵を転送する

    生成した公開鍵は、ログインするマシンのログインするユーザ、 この場合はFreeBSD-CURRENTのユーザarmdevelの、 ホームディレクトリ下のパス.sshにあるファイルauthorized_keys に貼り付けねばなりません。 そのためには、先に作成した公開鍵をFreeBSD上に転送します。転送にはpscpプロ グラムを使用します。

    C:\>"C:\Program Files\putty\pscp.exe" authorized_key.txt armdevel@localhost:
    The server's host key is not cached in the registry. You
    have no guarantee that the server is the computer you
    think it is.
    The server's rsa2 key fingerprint is:
    ssh-rsa 2048 72:7e:50:57:c8:de:68:06:d0:6a:46:12:bf:6e:03:ef
    If you trust this host, enter "y" to add the key to
    PuTTY's cache and carry on connecting.
    If you want to carry on connecting just once, without
    adding the key to the cache, enter "n".
    If you do not trust this host, press Return to abandon the
    connection.
    Store key in cache? (y/n) y ←初回SSHプロトコル接続時の質問。yと答える
    Using keyboard-interactive authentication.
    Password for armdevel@PandaMother-01: ←ユーザarmdevelのパスワード入力
    authorized_key.txt        | 0 kB |   0.4 kB/s | ETA: 00:00:00 | 100%

    この様にpscpプログラムを使用すれば、Windwosからssh接続できるFreeBSD 環境にファイルを転送したり、逆にFreeBSD環境からWindowsへファイル転送 したりもできます。

    公開鍵を登録する

    FreeBSDにユーザarmdevelでログインし、 公開鍵をファイル ~armdevel/.ssh/authorized_keysに張り付けるため 以下のコマンドを実行します。

    % mkdir .ssh
    % cat authorized_keys.txt >> ~/.ssh/authorized_keys
    % chmod 500 .ssh
    % chmod 400 .ssh/authorized_keys
    % rm authorized_keys.txt

    これでssh接続時に公開鍵を使えるようになりました。

    puttyで公開鍵認証でログインする

    では実際に公開鍵を使ってみましょう。以下がその手順です。

    1. 秘密鍵ファイルを設定
      puttyで使用する秘密鍵を指定 そのためにputty側で公開鍵認証を使用するよう設定を行います。 まず、[ssh]→[認証]画面の「認証のためのプライベートキーファイル」に 先に生成した秘密鍵ファイルを指定します。
    2. 通信先を指定
      通信先を指定 次にセッションでホスト名にlocalhostを指定します。 セッション一覧にFreeBSDのホスト名を入力して「保存」を押しておけば、 設定が保存されて一覧表示からのダブルクリックで接続可能になります。
    3. アクセスしてみる
      アクセスしてみる この様に漢字入力も行えます。
    4. 従来型のユーザ名/パスワード認証を無効にする

      ユーザarmdevelからrootユーザになって、sshの認証からユーザ名/パスワード 認証を無効にする設定を投入します。

      % su -l
      Password:    ←rootのパスワードを入力
      # vi /etc/ssh/sshd_config   ←ファイル/etc/ssh/sshd_configを編集します

      以下編集する内容です。
      ChallengeResponseAuthentication をnoに設定します。

      変更前:
      #ChallengeResponseAuthentication yes
      変更後:
      ChallengeResponseAuthentication no
      

      これで設定できたのでsshdを再起動します。

      # /etc/rc.d/sshd restart
      Stopping sshd.
      Waiting for PIDS: 33203.
      Performing sanity check on sshd configuration.
      Starting sshd.

      これで登録された公開鍵を持たない存在はsshログイン不能になりました。 なおこの状態でpscpコマンドを使用する場合は-iオプションで秘密鍵ファイル を指定して実行すると公開鍵認証方式を使用します。 ちょうどこんな感じです。

      $ pscp -i \どこかの\PandaMothor01.ppk 転送ファイル armdevel@localhost:/some/where/

      ここまでのまとめ

      仮想環境に負荷を与えずに 日本語入力やホスト環境とのコピペを実現するsshログイン方法を 紹介しました。

      この方法において強固なセキュリティを実現するために、 公開鍵暗号方式の認証設定も紹介しています。 仮想環境とはいえ第3者にアクセス可能となった瞬間からセキュリティ的脅威に さらされると考えるべきです。

      sshログインの発展形として、ホスト環境側、この場合はWindows上でX サーバを起動し、 FreeBSD側をXクライアントとしてWindows上にXアプリケーションの表示を行う、 という使い方もあります。 この方法に関してはいずれ項を改めて紹介したいと思います。

      次回以降ではFreeBSD上にX Windowを導入し、最新のVirtualBox-Guest-Additionを導入したうえで 設定を行うまでの手順をまとめます。