<次へ> <戻る> <目次> <home> 


2.  暗号鍵の作製と収納

  公開鍵を使って認証する方式の方がパスワードによる認証より安全性が高いのでなるべくそちらを使いましょう。公開鍵認証とは、公開暗号鍵と秘密暗号鍵のペアを作り、公開鍵で通信文を暗号化し秘密鍵で復号化する方式です。秘密鍵はユーザーが保持し、普段は暗号化して収納しておき、サーバーとやりとりするときにパスフレーズを使って復号化して使います。公開鍵はサーバーに予め登録しておきます。ここでは、暗号鍵の作成法と公開鍵をサーバーに登録する方法について述べます。

 暗号化の方式はSSHプロトコルヴァジョン1ではRSA方式、ヴァージョン2では、RSAもしくはDSA方式を使います。同じRSA方式でもSSH1とSSH2では互換性はありません。

 暗号鍵の記述形式は、SSH1では統一されていますが、SSH2では統一されていません。商用SSHと OpenSSH で違います。PuTTYの使用する形式はPuTTY独自のものですが、OpenSSHや商用SSHと互換性があるように配慮されています。OpenSSH鍵の形式はここに記述されています。

 ここで使うコマンドは、puttygen.exe と pageant.exe です。WinSCPをデフォルトインストールした場合は、「スタート」-「すべてのプログラム」-「WinSCP3」-「鍵関連ツール」-から、PuTTYgen もしくは Pageant を選べば開きます。あるいは D:\Program Files\WinSCP3\PuTTYに収納されているはずですから、そこで実行ファイルをダブルクリックしても開きます。無いときはPuTTYホームページのダウンロードロードコーナーから取得しましょう。

  鍵作製と収納の作業手順は以下の通りです。

2.1 puttygen を使って暗号鍵作製

1) PuTTYgen を開くと次のような画面が現れます。3種類ある認証法から使いたい暗号鍵をチェックし、「Generate」ボタンを押します。ここではSSH2/DSA認証用の暗号鍵を作ることにして、「SSH2DSA」をチェックします。暗号文の長さを指定する欄がありますが、デフォルト値の1024は実用的には充分長いと言えるでしょう。

コメント: PuTTYの作者はDSA方式には弱点があると主張しRSA方式を使うように薦めています。

    

 

2) 「Generate」ボタンを押すと鍵の生成が始まりますが、窓の下の空欄の中でマウスを動かさないと進行しません。

3) 鍵が生成されると次の画面のように鍵が表示されます。鍵は公開鍵と秘密鍵のペアが作られますが、ここに表示されるのは公開鍵の方です。これは長い文章で改行されている様に見えますが、実際は一行の文字列です。OpenSSHでは、SSh1、SSH2ともに公開鍵を一行の文字列にすることを要求しています。

鍵の下に「Key fingerprint」とあるのは鍵の指紋です。指紋は鍵自身から作られる16組の二桁の16進法の数字列です。ペアとなる秘密鍵と公開鍵は同じ指紋を持つことが保証されていますが、同じ指紋を持つ鍵を作ったり、指紋から鍵を再生する事はまず不可能であり、かつ鍵そのものと1対1に対応していますので、鍵を見せずに鍵の検証を行いたいときに使います。

コメント欄にはデフォルトのコメントが入っていますが、自分用の解りやすいコメントに書き換えましょう。コメントを入れると (ここでは -komento-ireta と追加入力しました) 、上の窓枠内の暗号にコメントが付け足されることがわかります。

 

4) パスフレーズを二カ所に入れて保存します。パスフレーズはパスワードよりは長いと言う意味で、覚えやすくて長い文章を作れるよう空白文字を使うことが許されています。「sergeant peppers lonely heart club band」のようになるべく長い文章にしましょう。ただし良いパスフレーズとは文法ミスがあり、一部数字と置き換わった文字列です。収納ファイルの名前の付け方は自由ですが、以下の名前が標準的です。秘密鍵とペアになる公開鍵のファイル名は秘密鍵のファイル名に「.pub」を付加します。

SSH1/RSA暗号鍵の収納ファイル名: identity, identity.pub
SSH2/RSA暗号鍵の収納ファイル名: id_rsa, id_rsa.pub
SSH2/DSA暗号鍵の収納ファイル名: id_dsa, id_dsa.pub

ただし、PuTTYgen では、秘密鍵にはデフォルトで *.PPKという拡張子を付けています。PuTTYgenで作製した鍵は保存しておけば、後に「Load」ボタンを押すことにより、暗号鍵収納ファイルから読み込んで鍵を再生し、コメントやパスワードフレーズを変えることができます。

パスフレーズを入れず空白のままにしておくと、秘密鍵は暗号化されずに収納されますので非常に危険です。かならずパスフレーズを入れてから収納しましょう。なおパスフレーズを忘れないようにしましょう。忘れた場合に鍵を再現する手段はありません。

注 意: ここでちょっとした留意点を述べます。

 先に述べたようにOpenSSH2と商用SSH2では暗号鍵ファイルに違ったフォーマットを採用しています。SSH1では違いがありません。OpenSSHではSSH1とSSH2は共に暗号鍵がコメントを含めて一行の文であることを要求します。PuTTYがSSH2公開鍵を収納するときは商用SSH2に類似のしかし独自のフォーマットを使います。下の三つの中で一番上の図は、id_rsa.pubに収納したSSH2/RSAの公開鍵を秀丸で開いた画面です(注)。収納された文は改行付きで数行にわたっていて、前の図の窓枠にある文字列と違うことに注目しましょう。これをこのままサーバーに持って行ってはいけません。持っていくべき物は上部の窓内にある文字列ですので、コメントを含め全てコピーします。Ctrl キーとCを同時に押せばクリックボードにコピーされます。右クリックからコピーを選んでもコピーできます。

 注: ここに表示した鍵は上の図の puttygen で作った鍵ではありません。

図(a) Putty key Generator で生成した公開鍵をファイルに収納した上で秀丸上に再現したところ。
図(b) puttygenで鍵を生成した時、上部の窓に表示される文字列を全部コピーしてペーストしたところ。
図(c) (b)に改行を付け加えたところ。

中の図はPuTTYgen の上部窓内の文字列を秀丸にペーストしたところの再現です。これは確かに一行構成の文字列となっていますが、困ったことに改行がありません。収納する公開鍵が一個の場合はこれでも良いのですが、二つ以上収納するときは改行がないと次の暗号鍵とつながってしまいます。そこで、改行を入れたものが図(c)です。改行が「LF」であることに注意してください。相手方サーバーがウインドウズ上で動くCygwin/OpenSSHであり、かつ改行コードとしてウインドウズ標準の「CR+LF」を選んでいるのであれば(※2)、「CR+LF」でよいのですが、大方のSSHサーバーはユニックスを使っているでしょうから「LF」で統一しておいた方が安全です。ウインドウズ付属のメモ帳などを使うと改行が「CR+LF」となりますので用心しましょう。

 ※2 詳しくは「ウインドウズにSSHサーバーを入れよう!」の第3章Cygwinのインストールを参照。

  こうしてコピーした公開鍵を、とりあえず、秀丸などのエディターで、OpenSSHpubkey.txt という暫定的なファイルを作り収納することにします。

2.2 サーバー内ホームディレクトリーへの収納

 パスワード認証を使ってSSH接続が可能な場合に一番簡単で安全な収納方法は、WinSCPを使うことです。使い方は第1章を参照してください。ここではリモートサーバーにWinSCPがつながって開いているとします。

注: WinSCPを使ってSSH接続ができない場合、通常のFTPクライアントを使わざるを得ないでしょう。公開鍵は公開しても一応安全ということにはなっていますが、危険は最小にするよう心がけましょう。ファイルを直接手渡してサーバーの管理者に入れてもらえるならそうしましょう。


1) SSHサーバーに公開鍵を登録するために、まずやるべきことは公開鍵の収納場所を作ることです。接続したいリモートサーバーの自分のホームディレクトリーの中に

$~/.ssh/authorized_keys

のように「.ssh」ディレクトリーを作り、その中に authorized_keys という名のファイルを作りそこに公開鍵を収納します。「~」 はホームディレクトリーのことです。OpenSSHの以前のヴァージョンではSSH2用の公開鍵は別に authorized_keys2 というファイルを用意して入れていたのですが、ヴァージョン2.9以降はSSH1,SSH2共に同じファイルに入れるよう統一されています。ただし、古いヴァージョンと両立させるため authorized_keys2 も読みに行きますのでどちらに入れても動きますが。

 .ssh ディレクトリーを作る手順は次の通りです(注)

a) リモートパネルをクリックしてアクティブにする。

b) リモートパネルでサーバーのホームディレクトリーに移る。

c) 「ファイル」プルダウンメニューから 「ディレクトリーの作成」を選択し、開いたダイアログ窓に .ssh (ドットエスエスエイチ)を打ち込んでOKする。ウインドウズのエクスプローラではドット付きの隠しフォルダーを作れませんが、WinSCPを使えばローカルにもリモートにも作れることは覚えておいてよい豆知識です。隠しフォルダーは薄い色で表示されます。

注: SSHサーバーを、ウインドウズで cygwin 上に構築した場合、ホストのユーザーホームディレクトリーで、ssh-user-config を実行すれば自動的に作られます。詳しくはウィンドウズにSSHサーバーを入れようここを参照。

2) 次に公開鍵を転送し、.ssh ディレクトリーに一時的に保存します。

a) リモートパネルでこの .ssh ディレクトリーに移動する。

b) 次にローカルパネルで、公開鍵を一時的に収納したファイル(上で作った OpenSSHpubkey.txt ) の存在するディレクトリーに移動する。

c) OpenSSHpubkey.txt を選択する。

d) 「ファイル」プルダウンメニューから「コピー」を選んで、クリックしリモートディレクトリー.sshに転送する。

3) 公開鍵の authorized_keys ファイルへの収納

 ☆始めての時

a)  リモートディレクトリーに移り転送したばかりの「OpenSSHpubkey.txt」を選択する。

b)  「ファァイル」プルダウンメニューから「名前の変更を選び、ファイル名を authorized_keys に変更する。

 あるいは OpenSSHpubkey.txt を authorized_keys と名前の付け替えをローカルコンピューター内で行い、このファイルを転送してもできます。

  上の例は authorized_keys を新しく作る例です。既に authorized_keys ファイルが存在しているときは、中に別のホストの公開鍵が収納されている可能性があります。この場合は追加収納しなければなりません。それにはPuTTYなどを使って自らサーバーのホームディレクトリーにログインしてファイルの操作をする必要がありますが、WinSCP3.5を使えば、その手間を省くことができます。

 ☆2回目以降: 

 <鍵追加の方法1>

 a) WinSCPでリモートパネルの .ssh ディレクトリーにはいってから 先に転送しておいた OpenSSHpubkey.txt を選択した後、「コマンド」メニューから「コンソールを開く」を選ぶと、

コマンド入力画面が出ます(下図)。窓の上に現在のディレクトリーとして  /home/tokki/.ssh が表示されているのでサーバー内に入ったことが判ります。

 b) コマンドの入力窓に

 cat OpenSSHpubkey.txt >> authorized_keys

を入力し「実行」ボタンを押すと(注)、authorized_keys に追加収納されます。

これはユニックスの命令で、catで OpenSSHpubkey.txt を読み込み次に authorized_keys の中の最後に付け足すという操作です。こうすれば既存の公開鍵を壊すことなく次々と追加して収納できます。>> の代わりに > とすると上書きコピーになるので注意しましょう。

注: コンソール画面には「実行」「閉じる」ボタンがあるはずなのですが、私がダウンロードしたWinSCP3.5 ではこのボタンが見えません。コマンド入力窓の右にわずかに見えるボタンが実行ボタンです。英語版にも無いので更新製品の初期バグのようです。直に修正されると思いますが、当面は無しでやるより他ありません。「実行」ボタンは有効ですが、「実行」ボタンは、キーボードのエンターで、「閉じる」はエスケープキーで代替えできます。

cat authorized_keys

を実行すれば、authorized_keys の中が見られるので正しい鍵が入ったかチェックできます。

 <鍵追加の方法2>

  PuTTYが既にインストール済みで、WinSCPと統合してあれば 、「コマンド」メニュー「PuTTYを開く」ことにより 直ちにサーバーに入れます。

統合方法については1.3章 環境設定ー統合を参照して下さい。PuTTYの方が上のコンソールより遙かに強力です。PuTTYを別途立ち上げておいて、単独でサーバーに入ることも可能です。多分ホームディレクトリーに入るはずですから、

cd ~/.ssh

を入力して .ssh ディレクトリーに移り、後は上と同じ手続きを踏んでください。

  注: この解説ではPuTTYの使い方は、ここより後に回しましたが、公開鍵を収納する前にまずWinSCP3.5とPuTTYを立ち上げておき、あらかじめWinSCPと統合しておくのがベストのように思われます。

 <鍵追加の方法3> 

  ウィンドウズユーザーは極力 GUI (グラフィック画面表示) で通したいだろうと思われますので、ここではコマンド入力無しで行う方法を示します。そのためにはお好みのエディターを用意してWinSCPにあらかじめ登録しておく必要があります。登録方法は第1.3章「環境設定ーエディター」の項を参照してください。

 1) リモートパネルで authorized_keys を選択します。

 2) 「ファイル」メニューから「編集」を選ぶと登録したお好みのエディターでauthorized_keys が開き内容が示されます。

 3)  puttygen を開いて鍵を生成するか、生成済みの鍵を読み込んで (Load して)、 puttygen 画面を開き、画面上部の公開鍵をコピーして authorized_keys ファイルの最後にペーストします。このとき、既に納めてある鍵の最後に改行が入っているかを確認し、無い場合は改行(注)してその後にペーストします。

 4) ファイルを保存して閉じます。

注: SSHサーバーがユニックス上で運営されている場合、改行をウィンドウズの「CR+LF」でなく「LF」にしないと拒否される場合がありますので、お好みのエディターは「LF」改行のできるものを選びましょう。私は秀丸を使っています。

2.3 保護措置

  鍵を収納した後は、他人が書き換えできないようパーミッションを設定します。またパーミッションを設定していないと、サーバーに拒否される可能性もあります。

WinSCPのリモートパネルでホームディレクトリーに入り、.ssh を選択してから

右クリックー「プロパティ」を選ぶとパーミッション設定画面が出ますので、オーナー(現在はユーザーtokki)以外は読み書きできないよう設定します(設定700 (注) )。また、authorized_keys を選んで644にしておきます(可能ならば600(所有者のRWのみチェック)の方がより安全です。)。

   

ユニックス上であれば、chmod 644 ~/.ssh/authorized_keys、chmod 700 ~/.ssh  を実行することと同じです。

注: 数字の意味: R(読み)、W(書き)、X(実行) をビットに見立て2進法で数えると、R=4、W=2、X=1となります。3桁の数字は上位の桁が所有者(O)、中の桁が所有者の属するグループ(G)、下の桁が他人(Other)を表します。従って700は、所有者がRWX、グループと他人が"なし"の権限を、644は所有者がRW、グループと他人がRのみの権限を有することを示します。

2.4 Pageantの設定

 SSH仕様ではエージェントに暗号鍵を登録することにより、面倒なパスフレーズの入力を一度だけで済ませることができます。Pageant はPuTTY におけるエージェント名です。Pageant.exe をダブルクリックするとタスクトレイに入ります(下図の左端のアイコン)。このアイコンはウインドウズが起動している間だけ生きています。つまりウインドウズの起動ごとにPageantを起動する必要があります。


アイコンを右クリックして「View Keys」選ぶとPageant Key List画面が現れます。「Add Key」ボタンを押すと「Select Private Key File」画面が現れます。先ほど収納した暗号鍵のうち秘密鍵を収納したファイルを指定するとパスフレーズを聴いてきますので入れてOKすると、下の様な画面になります。鍵の指紋が表示されています。指紋を使うのは同じ指紋を持つを公開鍵のペアを作ったり、指紋から鍵を再現することはまず不可能である上、鍵そのものは見せなくてすむ利点があるからです。Pageantに入る情報は、左側から公開鍵の方式(ssh1=SSH1/RSA、ssh-rsa=SSH2/RSA、ssh-dss=SSH2/DSA)、鍵サイズのビット数、指紋、コメントとなっています。

 「Add Key」ボタンを使って複数の鍵を登録したり、「Remove Key」で削除が可能です。

Pageantに鍵を登録したところ。鍵の指紋が表示されます

WinSCPやPuTTYのセッションに登録されている公開鍵と同じ鍵が Pageantに登録された場合は、その セッション を開いてSSHサーバーに接続する際にパスフレーズを要求されません。

さらに、セッションにユーザー名が登録されていればログイン時のユーザー名を要求されませんから(PuTTYの場合、設定「接続」ー「自動ログインのユーザー名」)参照)、セッション を開くだけでログインが可能になります。

2.5 OpenSSHで作製した鍵をPuTTYgenに収納する

  OpenSSH の暗号鍵をユニックスの ssh-keygen コマンドで作り、公開鍵をサーバーマシンの authorized_keys に収納した場合、そのままではPuTTYで使うことはできません。puttygenを起動して、「Conversion」-「Import」を選択して、一旦秘密鍵を読み込み、改めて「Save public key」「Save private key」ボタンを使って収納し直せば、以降 puttygen を使って生成した鍵と同じ扱いができます。「Export」を使えば逆、すなわちPuTTYの作った鍵を、OpenSSH用に変換することも可能です。

<次へ> <戻る> <top> <目次> <home>