Windowsでsshクライアントを使う――ラスト・ワンマイル!

前々回、WindowsにOpenSSHをインストールし、前回、PowerShellで発生する日本語の文字化け問題を解消する方法について説明した。Linux/*BSDなら、最初からここまでの設定がなされた状態で提供されていることを思うとWindowsは面倒なのだが、そこは今春以降に期待しよう。ともあれ、これでようやくWindows環境でsshクライアントを使うための下準備が整った。ゴールまであと少しだ。

Mac OS XやLinux/*BSDの環境からOpenSSHでリモート・ログインする場合、基本的には公開鍵認証を使ったログインのみを有効にしておくほうがよいと説明したことを覚えているだろうか。この点は、Windowsでも同様だ。以降では、Windowsで公開鍵認証を設定する際の手順を見ていこう。

公開鍵と秘密鍵のペアを生成する

まず、公開鍵と秘密鍵のペアを生成する。PowerShellを起動し、オプションなしでssh-keygenコマンドを実行すると、次のように2つのファイルが生成される。

作成される公開鍵と秘密鍵

  • 公開鍵:~.ssh\id_rsa.pub
  • 秘密鍵:~.ssh\id_rsa

「~」の部分は、ここでは「C:\Users\daichi」だ。生成した公開鍵はログインしたいサーバに設定し、秘密鍵は1台のクライアントPCだけで保持しておく。PCを紛失したり、秘密鍵が漏れたりした場合、そのペアとなる公開鍵をサーバから削除すれば、不正ログインを防ぐことができる。

なお、途中で入力を求められる「パスフレーズ」は、秘密鍵を守るためのパスワードのようなものだ。パスフレーズを設定しておけば、万一秘密鍵が流出しても対策を講じるまでの時間稼ぎになる。できるだけ設定しておいたほうがよいだろう。

サーバに公開鍵を設定

作成した公開鍵の中身は、次のような1行のテキストになっている。

複数行にわたっているように見えるが、実は1行

これをサーバに設定するには、まず、パスワード認証でサーバにログインできる状態にしておき、ログイン後、「~/.ssh/authorized_keys」というファイルにこの公開鍵を追加する。追加したら、ログイン方法を公開鍵認証のみにするように設定を変更すればよい。ただし、追加内容などを間違えたまま公開鍵認証のみにしてしまうと、二度とログインできないはめになる。くれぐれも、公開鍵認証でログインできることを確認してから変更するようにしてほしい。

また、このとき気をつけなければいけないのはファイルのパーミッションだ。「~/.ssh」は700、「~/.ssh/authorized_keys」は600でないと、公開鍵として認識されないので注意されたい。

クライアント側の設定

次に、サーバに対してどの秘密鍵を使ってログインするのかを~/.ssh/configファイルに追加する。

追加する設定内容

ここでは、指定したIPアドレスのサーバに「centos」という名前でログインできるように設定した。ポート番号は「22」、ユーザー名は「daichi」、秘密鍵は「~/.ssh/id_rsa」だ。

もし~/.ssh/configファイルが存在しない場合、ファイルを開こうとすると新規作成するか否かを確認するダイアログが表示されるので「はい」を選択して作成する。ただしその際、「config.txt」という具合に拡張子がついてしまうので、いったんファイルを保存した後、mvコマンドでファイル名を変更して拡張子を削除しておく。

設定ファイルのパスが~/.ssh/configになるように拡張子を削除

オプション「-v」で最後の確認

以上で、ひととおりの設定は完了だ。「ssh centos」と入力すれば、設定した公開鍵でログインすることができる。ログイン方法が公開鍵認証のみになっているかどうか確認するには、オプション「-v」を指定して実行する。ログインの流れをもっとくわしく知りたい場合は、オプション「-vvv」を指定して実行すればよい。

ここまでくれば、Mac OS Xからログインしようが、Windows 7でログインしようが、あとは同じだ。余談だが、PowerShellは効率良く”手抜き”ができるすばらしいツールだ。もしなじみがないようなら、これを機会にぜひ使ってみていただきたい。

今回のおさらい

今回の内容をまとめると、次のようになる。PowerShellは使ったが、やったことは基本的に第5回と同じだ。

  • 公開鍵と秘密鍵のペアは、ssh-keygenコマンドで生成する
  • 公開鍵は、サーバの~/.ssh/autorized_keysファイルに追加する
  • 秘密鍵は、クライアント側で保持する
  • クライアント側では~/.ssh/configファイルに設定を追加する
  • ~/.sshとその配下のファイルは、パーミッションを正しく設定すること
  • アクセス時の認証方式は、「ssh -v」で確認できる

すでにお気づきのとおり、クライアントにOpenSSHを使うことで、WindowsでもMac OS XやLinux/*BSDとほぼ同じ感覚で操作/設定できるようになる。ささいなことのようだが、忙しい時などは特に、ちょっとした操作や設定方法が微妙に異なるとそれだけでイライラさせられるものだ。OSが違っても、可能な限り同じソフトウェアを使うようにするのが賢い選択だろう。