DSA認証を使ってパスワードなしでssh

sshでサーバにログインするときやscpでファイルをコピーするときに毎回パスワードを入力するのは面倒だなあと考えるのが人情です。

そこで毎回パスワードを入力しなくてすむような設定にしようと考えるわけですが、sshではパスワード認証以外に、DSA認証やRSA認証という公開鍵を使った認証が使用できます。細かい違いがあるとは思いますがここではあまり深く気にせずDSA認証を使うことにします。

ローカルのマシンで以下のコマンドを実行すると~/.sshディレクトリにDSA鍵が生成されます。

$ ssh-keygen -t dsa

ここで鍵を生成するときにパスフレーズの入力を求められます。秘密鍵をパスフレーズで保護するのがセキュリティ的にはよりよいのでしょう。しかし、 それだとせっかくパスワード認証をやめてパスワードの入力をしなくてすむようになったのに、DSA秘密鍵を使うためにパスフレーズを入力しなくてはいけな くなり本末転倒です。

そこでパスフレーズを入力しなくていい方法を探すことになりますが、おそらくよりセキュリティ的に正しい方法はssh-agentを利用して一度パスフレーズを入力するとその後は入力しなくてすむようにする方法だと思われます。

しかし、個人的にはssh-agentを使うというのは面倒な上に中途半端なイメージで出来れば避けたいものです。そこで最初の鍵生成の所に話が戻 りますが、鍵を生成するときにパスフレーズを指定しなければ、パスフレーズなしの鍵が生成されます。具体的には上記のコマンドを実行後にエンターを連打し てればOKです。

そして公開鍵をリモートのマシンの~/.ssh/authorized_keysというファイルに追加します。今回の私の環境ではさくらインターネットのサーバですね。

$ scp ~/.ssh/id_dsa.pub ユーザ名@リモートマシン:

リモートのマシンにログインした後に

$ mkdir .ssh

$ cat id_dsa.pub >> .ssh/authorized_keys

$ rm id_dsa.pub

これで毎回パスワードを入力することなくログインできるようになります。セキュリティ的な議論はどうなるのでしょうか。秘密鍵が盗まれるような状況でパスフレーズがあるのは気休めかそれとも本質的にセキュリティが向上するのか。