PuTTY で鍵交換方式による SSH 接続


1. はじめに

KUINS ニュース No.45 で,暗号技術を用いた安全な通信方式の SSH(Secure SHell) を用いて接続ができる Windowsマシンに対応した SSHクライアントプログラムで端末エミュレータの機能を持つ PuTTY の利用方法について紹介しました.

その中では,パスワードを用いたユーザ認証によってSSH接続を実現する 設定について記載しましたが,ユーザ認証としてパスワードを利用すると,

などによって,パスワードが第三者によって利用されてしまう「なりすまし」の 危険性を回避することはできません. そのため,SSHではパスワード認証ではなく, 公開鍵暗号方式を用いた認証による接続が推奨されています.

公開鍵暗号方式とはデータ暗号方式の一つで,ユーザが独自に「公開鍵」と 「秘密鍵」と呼ぶ二つの鍵をペアで作成し,それらの鍵を使ってデータの暗号化/ 復号化を行います.公開鍵は暗号文を作り出す鍵で,通信相手に知らせる鍵として インターネット上でもやりとりできます.また,だれでもこの公開鍵で暗号文を 作成でき,鍵を公開している人に送ることができます.一方,暗号文の受け手は 公開鍵とペアになっている本人だけが分かるように厳重に管理された 秘密鍵で復号します.暗号化と復号化を同じ鍵で行う共通鍵暗号方式に比べて, 公開鍵の共有が容易なことや相手の数に関係なく公開鍵は1つでよいなど, 鍵の管理が容易で安全性が高いとされています.

今回は,PuTTY での鍵交換方式による SSH 接続方法について紹介いたします.


2. PuTTY における SSH 鍵生成

まず,自分が使用しているPC にPuTTY をインストールされている必要が あります.PuTYY がインストールされていない場合は, KUINS ニュース No.45 の記事を参照してインストールを行って下さい.

PuTTYで鍵生成を行うプログラムとして, PuTTYgen が付属していますのでこれを利用します.スタートメニューから,

「スタート」--> 「プログラム」--> 「PuTTY」--> 「PuTTYgen」

とたどることにより,PuTTYgen を起動することができ, 図1にあるウインドウが表示されます.


図1: PuTTYgen の起動画面

まず,鍵の生成を行う前に,鍵の種類を設定します.種類は "SSH1 RSA"・"SSH2 RSA"・"SSH2 DSA" の3種類から選べます. ここではSSH2 接続できるように "SSH2 RSA" を選択してください.(PuTTYgen のHELPファイルでは, "SSH DSA" よりも "SSH2 RSA" を推奨しています)

次に, generate ボタンを押して鍵を生成します. マウスの動きで乱数生成を行いますので,ダイアログ上で適当にマウス を動かしてください(図2)


図2: 鍵生成(マウスの動きによる乱数作成)

ポインタを動かし続けていると, 「Please wait while a key is generated...」と メッセージが変わり鍵が生成されます(図3)


図3: 鍵生成中の画面

鍵が生成されましたら,パスフレーズの入力を行います. ウインドウの中央部分にある『Key passphrase』にパスフレーズとして 任意の文字列を入力し,確認のためにその下の『Confirm passphrase』に 同じパスフレーズを繰り返し入力します(図4). パスフレーズには文字制限がなく,また空白も含めることが可能です (尚,ここで入力するパスフレーズは, UNIXサーバなどのユーザに対するパスワードとは違うものです).

パスフレーズを入力したら,作成した鍵を保存します.『Save private key』 (秘密鍵),『Save public key』(公開鍵) を順にクリックしてください. それぞれファイル名を決めて保存します.

保存先については特に制限はありませんが,本稿では,

C:\Program Files\PuTTY

に,秘密鍵を id_rsa.ppk, 公開鍵を id_rsa.pub という名前で保存することにします.


図4: パスフレーズの入力,秘密鍵,公開鍵の保存


3. SSHサーバへ公開鍵の登録

次に,作成した公開鍵を接続するSSHサーバに登録を行います (尚、今回はサーバ側で OpenSSH を用いていると想定しています). 最初に公開鍵を SSH サーバに転送する必要があります.転送方法としては 安全に転送を行うために,SCP,SFTP などを使うことで可能ですが,ここでは PuTTY に付属されている pscp コマンドを利用します.本稿では SSH サーバの例として, メディアセンター北館に設置のスーパーコンピュータ (以下,HPC2500)を用います.

まず,コマンドプロンプトを立ち上げて (スタートメニューから「プログラム」-> 「アクセサリ」), 以下のコマンドを実行して,pscp.exe が存在するディレクトリに移動します.

C:\> cd C:\Program\PuTTY

そして, 以下のコマンドで公開鍵をHPC2500(FQDN名:hpc.kudpc.kyoto-u.ac.jp)に転送します. 尚,ここでは ユーザアカウントを user-id としていますが, 各自で使用しているSSH サーバに登録されている自分のアカウント名, SSH サーバのホスト名に置き換えて下さい.

C:\> pscp id_rsa.pub user-id@hpc.kudpc.kyoto-u.ac.jp:id_rsa.pub

次に,転送した公開鍵をサーバに登録を行うために,HPC2500に ログインします.ログインは PuTTY を使用して行うことができます. 方法については, KUINS ニュース No.45 の記事を参考にして下さい.

ログインできましたら, 登録の前に PuTTYgen で作成した公開鍵を,OpenSSH で使用できるように変換を行う必要があります. 変換方法として,ssh-keygen コマンドを用います.以下のコマンドを実行して下さい.

% ssh-keygen -i -f id_rsa.pub >> authorized_keys

次に,自分のホームディレクトリに .ssh というディレクトリが存在することを確認して下さい. 存在しない場合はディレクトリを作成し,またディレクトリのパーミッションを 700にしておきます.

そして,.ssh ディレクトリに移動します. そのディレクトリに authorized_keys というファイルが存在していなければ, さきほど変換して作成したファイルをこのディレクトリに移動させます. また,authorized_keysのパーミッションを 600にしておきます.

以上の作業を,下記のコマンドを実行することで行えます.

% cd .ssh
% mv ../authorized_keys .
% chmod 600 authorized_keys

authorized_keysが既に存在している場合は, そのファイルにさきほど変換したファイルの内容を追加して下さい.

あと,転送した公開鍵ファイル(id_rsa.pub)は削除しておいて下さい.

% rm ~/id_rsa.pub


4. PuTTY での設定

サーバ側での鍵登録が完了しましたら,PuTTY で認証の設定を行います. スタートメニューから,あるいはデスクトップ上にあるPuTTYのアイコンを ダブルクリックすることにより,PuTTYの設定のウィンドウを起動します.

まず,『保存されたセッション』 の欄に既に登録されている中で, 公開鍵を登録したサーバのセッションを選択し,読込ボタンをクリックします. ここでは,サーバのホスト名と同じ hpc.kudpc.kyoto-u.ac.jp のセッションを 選択しています(図5)


図5: PuTTY の設定画面

次に,カテゴリの『接続』-> 『SSH』-> 『認証』を選択すると, 図6の画面が表示されます. その中で『認証パラメータ』『認証のためのプライベートキーファイル』で作成した 自分の秘密鍵(id_rsa.ppk)を指定します. 参照ボタンをクリックして, 秘密鍵があるフォルダに移動して,使用する秘密鍵ファイルを選択して下さい. 設定が完了しましたら,『セッション』のカテゴリに移動し, 保存をクリックします.


図6: SSH 認証を管理するオプション


5. SSH サーバへのログイン

設定が完了しましたので,実際にサーバにログインをしてみます. さきほど保存したセッションを読み込んで,開く のボタンをクリックします.
図7のような PuTTY のウインドウが表示されます. パスワード認証の際のログインと異なり,

Authenticating with public key "rsa-key-20041213"
Passphrase for key "rsa-key-20041213"

というメッセージが表示され,パスフレーズの入力を要求されます. (尚,rsa-key-20041213 は,鍵作成の際に設定されているキーメッセージです.) パスフレーズは,鍵作成の際に入力したものをこのウインドウ上に入力します. 正しく入力できると,図8 のように正常にログインが完了します.


図7: PuTTY のウインドウ(パスフレーズ入力を要求)


図8: PuTTY のウインドウ(ログイン完了)


6. Pagent の利用

以上の方法で,PuTTYで鍵交換によってsshサーバにログイン可能になりました. しかしこの方法においてもログインする度に, パスフレーズを入力する作業を行う必要があります. そこで,Pagent
を利用することにより, パスフレーズの入力を省略することができます. 次に,Pagentの利用方法について紹介します.

スタートメニューから,Pagent を起動します.
(「スタート」--> 「プログラム」--> 「PuTTY」--> 「Pagent」とたどれます) 起動しますと,タスクバー(右下)にアイコンが表示されます (図9). そのアイコンをダブルクリックすると,図10 のウインドウが表示されます.

  
図9: Pagent のアイコン 図10: 秘密鍵登録のウインドウ

そして,Add Keyをクリックしますと, 『Select Private Key File』のダイアログが立ち上がりますので, 作成している秘密(id_rsa.ppk) のフォルダに移動して選択します.選択しますと, 『Pagent: Enter Passphrase』のウインドウが表示されて パスフレーズを聞かれますので, 鍵作成時に設定したパスフレーズを入力して下さい (図11)


図11: パスフレーズの入力

パスフレーズが正しく入力されましたら, 図12のように登録された秘密鍵が表示されます. 登録が確認できましたら,Closeボタンでこのウインドウを閉じて, 完了です.


図12: 秘密鍵登録のウインドウ(登録完了)

このように, Pagaent が常駐している状態 (タスクバーにアイコンが表示されている状態)でPuTTYを起動しますと, パスフレーズを聞かれることなく sshサーバにログインすることが可能です. 但し,Pagentを終了させた場合, もう一度秘密鍵の登録からやり直すことになります.


7. おわりに

本稿では,PuTTYを用いた公開鍵認証に必要な鍵ペア(公開鍵, 秘密鍵)を作成するツール(PuTTYgen) や公開鍵認証でリモートホストにログインする場合のパスフレーズの入力を省略できる (Pageant)について紹介しました.

パスワードを用いたユーザ認証では,パスワードが何らかの形で第三者に漏れると, 容易にアクセス可能されてしまう事態を避けられませんので,今回紹介した 公開鍵暗号方式での認証への移行をお勧めします.