2009年3月15日日曜日

dsa認証のやり方(FreeBSDとwindows)

前々回の投稿でパスワード認証を禁止したが,その際,dsa認証を使うのがよい,と書いた。今回はその具体的な方法を書いておこう。筆者はいろいろな都合で,windowsマシンからFreeBSDのマシンに入って作業をすることが多い。なので,(1) FreeBSDの場合,(2) MacintoshのOS-Xの場合,(3) windowsのPuTTYを使う場合,について書いてみる。

(1) FreeBSDの場合
 (a) 鍵ペアを作る
Linux / Unix系のマシンの場合,「ssh-keygen」というコマンドを使います。「> ssh-keygen -t dsa」とすると,「~/.ssh/」に「id_dsa」と「id_dsa.pub」というキーが作られます。ここで,
  ・id_dsaprivateキー(手元においておいて他人には見せない)
  ・id_dsa.pubpublicキー(ログイン先のサーバーに送り込む)
です。パスフレーズはパスワードみたいなものですが,ログイン先サーバーに送られるのではなくて,作った鍵(id_dsaのprivateキー)を使うために入力するものです。つまり自分のマシン内でパスフレーズで鍵を使えるようにしておいて,後は鍵のやり取りをサーバーとの間で行う,というのがdsa認証のやり方です。以下がdsa鍵作成の実例。
> ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/xxxx/.ssh/id_dsa): (註1)
Enter passphrase (empty for no passphrase): (註2)
Enter same passphrase again: (註2)
Your identification has been saved in /home/xxxx/.ssh/id_dsa.
Your public key has been saved in /home/xxxx/.ssh/id_dsa.pub.
The key fingerprint is:
aa:bb:cc:dd:48:67:e6:cf:ae:11:af:11:22:33:44:55 xxxx@yyyy.zz.aa.jp
(註1:鍵ファイルのファイル名。デフォルトはid_dsa。デフォルトのままでよいならそのままリターン)
(註2:パスフレーズを入力。安全のため10文字以上,できれば20文字以上ほしい。)

 (b) 二つのキーファイルのうちの「id_dsa.pub」をscp等を使ってログインしたいサーバーに送り込みます。

 (c) サーバーでは,~/.ssh/の下に移動させ,名前をauthorized_keys2とします。もしすでにautorized_keys2というファイルがある場合は,送り込んだid_dsa.pubの内容をエディターでauthorized_keys2の末尾に結合させます。
<注意> 「.ssh/」のpermissionは「700」でないとうまくいきません
  「> chmod 700 .ssh」

 (d) 鍵を使ってログインする
・上記の設定ができれば,sshで普通にログインを試みます。そうするとパスフレーズの入力を要求されるので,パスフレーズを入れるとログインできます。
・もうちょっと楽をしたければ,ssh-agentを使うと便利です。例えばX-windowを起動する時や,screenを起動する時にssh-agentを使っておきます。
screenを使った例:「> /usr/bin/ssh-agent screen "-e^Pp"」
・さらに,X-windowsやscreenの中で「> /usr/bin/ssh-add ~/.ssh/id_dsa」のようにssh-addで鍵を有効にすれば一度パスフレーズを入力するだけで楽にログインできます。

(2) MacintoshのOS-Xの場合
 MacintoshのOS-Xは基本的にFreeBSDなので,ターミナルを使って上記のFreeBSDの作業をすれば使えます。

(3) windowsのPuTTYを使う場合
 (a) PuTTYのインストール
 windowsでunixにログインして作業するには,まずは適当なターミナルソフトが必要です。筆者はよくPuTTYを使っています。なので,PuTTYでの使い方を書きましょう。

・まずは本家PuTTYダウンロードのページに行って,「putty-0.60-installer.exe」を取ってきましょう(2009/3/13現在では,putty-0.60が最新)。そして,この「putty-0.60-installer.exe」をインストールします。するとwindowsのC:\Program FilesにPuTTYというフォルダができます。

・次にhdk の自作ソフトの紹介 | PuTTYjpに行って,本家と同じバージョンの日本語のPuTTYを取ってきます(2009/3/13現在では,putty-0.60-jp20070603.zip)。これを解凍して,中身をC:\Program Files\PuTTY\の中に移動します。実行ファイルはputtyjp.exeという名前で,putty.exeとは別ものになっているのですが、ドキュメントのファイル名は同じ物があるかもしれません。以前は同じファイル名の物があって、上書きするか?と聞かれて,上書きしていました。最近はどうかな?

・本家のPuTTYをインストールした際にデスクトップにショートカットができているので,そのプロパティでショートカット先を「"C:\Program Files\PuTTY\puttyjp.exe"」に変更しておきましょう。また,「スタート」→「プログラム」→「PuTTY」の中のPuTTYのプロパティも同様にリンク先を「"C:\Program Files\PuTTY\puttyjp.exe"」とすれば、混乱がなくなり、便利になります。

・PuTTYを起動したら、まず設定して、その設定を「保存」しましょう。
  ・「接続」-「SSH」で優先するSSHプロトコルバージョンを「2」あるいは「2 only」にしましょう。
  ・「ウィンドウ」でウィンドウサイズを適当な大きなサイズにしましょう。
  ・「ウィンドウ」-「色」で色を適当に選びましょう。
  ・「セッション」で「ホスト名」を「serv1.xxx.yyy.zz.jp」などにし、「プロトコル」を「SSH」にします。
  ・「端末」-「キーボード」-「バックスペースキー」を「control-H」にした方がよいことが多くあります。
  ・最後に「保存されたセッション」の欄に「適当な名前」をいれて、「保存」します。(例えば、「serv1」としましょう)

・デスクトップ上のPuTTYのショートカットのプロパティで(ショートカット上でマウス右クリック)、リンク先を「"C:\Program Files\PuTTY\puttyjp.exe" @serv1」とすれば、ショートカットをダブルクリックするだけで設定「serv1」で接続してくれます。

・PuTTYの使い方は普通のターミナルソフトと同じですが、文のコピー:3ボタンマウスの中央ボタン、文のペースト:マウスの右ボタン、でいけます。

 (b) puttygen.exeによる鍵ファイルの生成
・「c:\Program Files\PuTTY\puttygen.exe」を起動します。起動したら,メニューバー(上の方)の「Key」の中の「SSH2 DSA key」を選びます。あるいは,下のほうにある「Parameters」の中の「SSH2 DSA」を選びます。これで作成する鍵ペアは「dsa」用となります。
・次に「Generate a public/private key pair」(中央,右のちょっと下の「Generate」ボタンか,メニューバーの「Key」の中の「Generate key pair」)で鍵ペアを作ります。この時,ランダムにキーを作成するために,「Key」と書いてあるスペースの中でマウスをぐるぐると動かしてください。そうすると,作業状態を示すバーがどんどん伸びます。
・鍵ができると,「Public key for ...」と「Key fingerprint」,「Key comment」に文字が書かれた状態になります。
・「Key comment」は書き換えることができます。
 defaultは作成日などになっていますが,どのコンピュータで作成したかなどを入れてもよいでしょう。

 (c) privateキーの保存
・ここで「Key passphrase」と「Confirm passphrase」にパスフレーズ(鍵を使うためのパスワードみたいなもの)を入れましょう。より安全にするためにパスフレーズは最低でも10文字,できれば20文字以上を使いましょう。
・パスフレーズを入れたら,「Save the generated key」の「Save private key」で作ったprivateキーを保存しましょう。名前は「id_dsa」とするとunixとお揃いになります。ちなみに,拡張子が勝手について「id_dsa.ppk」となります。

 (d) publicキーをサーバーに送り込む
・publicキーの方は,「Key」というスペースの中の「Public key for pasting into OpenSSH autorized_keys file:」の中の文字列「ssh-dss ......... 」をコピーして,サーバー上に「~/.ssh/authorized_keys2」という名前のテキストファイルとして保存します。(一度ログインしてファイルを作りましょう)
・homeディレクトリの中に「.ssh/」(~/.ssh/)というディレクトリがなければ,「> mkdir .ssh」として作ります。
 この時,「.ssh/」のpermissionは「700」としましょう
  「> chmod 700 .ssh」
・もし,すでにauthorized_keys2というファイルがある場合は,文字列「ssh-dss ......... 」をauthorized_keys2の末尾に結合させます。

 (e) 鍵を使ってサーバーにログインする
・PuTTYの設定で,サーバーに接続する設定を読み込みます。
・さらに,「接続」-「SSH」-「認証」で「認証のためのプライベートキーファイル」を入力する場所があるので,作成したprivateキーを指定します。これもPuTTYの設定の中の「セッション」で「保存」しておきましょう。
・その状態で設定を保存すれば毎回ログイン時にパスフレーズの入力を要求され,privateキーを使ったdsa認証が行なわれます。

 (f) すでにあるdsa-private-keyファイルを使いたい時
・サーバー等で作ったdsa-private-keyファイルが既にある時は,puttygen.exeで「Conversions」-「Import key」を選びましょう。そこですでにあるdsa-private-keyを読み込みます。読み込む時にpassphraseを聞かれます。正しく入れましょう。
Parameters(下のほうにあります)で,「SSH2 DSA」を選びましょう。そして「Save Private Key」として保存します。ファイル名は「id_dsa2」などとしましょう。勝手に拡張子「ppk」がつきます。

 (g) Pagent.exe(常駐型)を使ってサーバーに入る
・作成したprivateキー(id_dsa.ppk)というファイルをダブルクリックして,「Pagent.exe」というプログラムを起動します。パスフレーズを聞かれるので,正しいものを入れましょう。
 この「Pagent.exe」は常駐していて,作成したprivateキーが有効な状態にしておいてくれます。ただし,他の人がwindowsマシンを簡単に操作できると勝手にサーバーに入られるので,気をつけて使わないととても危険です。個人マシンで使うことを勧めます。また席を離れる時は「windowsキー+L」で画面をロックすることをお勧めします
・起動時にパスフレーズを入力するには,「C:\Documents and Settings\yyyyy\スタート メニュー\プログラム\スタートアップ」(yyyyyはユーザー名)にprivateキーファイルのショートカットを入れておくといいでしょう。
・PuTTYを使う際に,「PuTTYの設定」の「接続」で,自動ログインユーザーをサーバーのユーザー名にすると便利です。
・「Pagent.exe」を起動しておくと,WinSCPなどでも使えるので便利です。

0 件のコメント: