パスワード入力無しで PuTTY から SSHサーバへ接続する

概要

この記事では次のような環境を想定する。

  • Windows側のPuTTYSSHクライアント)からLinux側のOpenSSH(SSHサーバー)へ接続している
  • SSHのユーザー認証にパスワード認証を使用し,ログイン時に毎回パスワードを手で入力している
  • この現状を改善したい。つまり,パスワード入力を省略したい(公開鍵認証を使用する)

SSHのユーザー認証にパスワード認証を使用している場合,我々はログインするためにパスワードの入力を強制される。このような人間にとって面倒な作業は自動化されることが望ましい。
ログイン時にパスワード入力を省略する方法はいくつかあり,今回はこの中で最も簡単で簡潔だと思われる方法を紹介する。それは認証に公開鍵認証を使用する方法で,パスワードの代わりに鍵と呼ばれるファイルをアイデンティティとするためログイン時のパスワード入力を省略できる。この公開鍵認証は PuTTY と OpenSSH の設定を少し変更するだけで使えるようになる。つまり,既存のソフトウェアだけを必要とするので目的を簡単に実現できる。
今回の興味の対象はパスワード入力なしで SSHサーバへ接続することなので,それを実現する最低限の設定を以下で記述する。セキュリティに関する設定は今回の興味の対象では無く,各自お気に入りの設定があると思うのでここでは記述しない。

鍵の作成

鍵は Linux側の `ssh-keygen` で作成する(Windows側の puttygen.exe でも作成できるが,OpenSSH用に変換する必要があるため面倒):
オプション `-N ""` を指定して,パスフレーズを設定しないようにする。パスフレーズとは鍵ファイルを暗号化・複合するための文字列で,鍵ファイルが盗まれた場合の時間稼ぎになる。しかし,鍵ファイルを使用する際にパスフレーズを入力する必要があり,今回の目的に反するのでパスフレーズは設定しない。

$ssh-keygen -N ""

ここで ~/.ssh 以下に公開鍵(id_rsa.pub)と秘密鍵(id_rsa)が作成される。

鍵をあるべき場所へ移動

公開鍵は Linux側(サーバー),秘密鍵Windows側(クライアント)に配置する。どうして鍵が二つあるのか分からない人はサイモン・シン『暗号解読』でも読んどけばいい。

公開鍵

Linux側に置く公開鍵は ~/.ssh/authorized_keys へ追記する:

$cd ~/.ssh
$cat id_rsa.pub >> ~/.ssh/authorized_keys
秘密鍵

秘密鍵(id_rsa)は Windows側に移動しておく。秘密鍵は秘密にしなければならない鍵なので大切に管理しよう。

秘密鍵を使って接続

PuTTY用の秘密鍵の作成

  • 読み込みが成功したら「秘密鍵の保存」で秘密鍵PuTTYで使える形式に保存しておく。

PuTTYの設定・接続

putty.exe を立ち上げて,お気に入りの設定に次の変更を加える:

  • 設定 ▸ 接続 ▸ データ の「自動ログインのユーザー名」にユーザー名を入力する。
  • 設定 ▸ 接続 ▸ SSH ▸ 認証 の「認証のためのプライベートキーファイル」に上で保存した秘密鍵を指定する。

この設定からPuTTYを開けばパスワード入力なしにログインできる。