SSH でリモート認証

Linux を利用していると、 ネットワーク上の他のパソコンを操作したいことがしばしばあります。 そのようなとき、より安全にリモート認証を行うのが、SSH による認証です。

SSH とは

SSH は、Secure SHell の略称です。 自分が今利用しているパソコンから、 ネットワークでつながっている他のパソコンを利用するときに使用します。 従来は telnet が用いられていましたが、 telnet は暗号化されないため、パスワードがネットワーク上に流れてしまう、 という問題があります。 そこで、telnet に代って、暗号化に対応した SSH が利用されるようになりました。

SSH を利用しよう

SSH の利用方法は telnet とほぼ同じです。 コマンドラインで以下のように入力しましょう。 ユーザー名は省略可能です。 省略した場合、手元のパソコンのユーザー名と同じになります。

$ ssh ホスト名 -l ユーザー名

パスワードを入力するように求められますので、 パスワードを入力してください。 正しくパスワードを入力すると、 リモートホスト(ネットワーク上のパソコン)にログインできます。

RSA 暗号を利用しよう。

SSH では、パスワードによる認証も暗号化されていますが、 パスワードを類推されてしまったり、 総当たりで破られてしまったりするかもしれません。 それを防ぐために、RSA 暗号を利用しましょう。 MIT の 3 人の研究者、Ronald L.Rivest、Adi Shamir、Leonard M.Adelman の 頭文字から RSA と名付けられました。

RSA 暗号は、素因数分解が非常に難しいことを利用した暗号です。 p と q が素数であるとき、p x q の計算は簡単にできますね。 しかし、逆に p x q が与えられたときに、 この数がどのように素因数分解されるか、 というのは容易にはわかりません。 特に、p や q が大きくなると、非常に難しくなります。 このため、鍵の生成は容易だが、 鍵を破るのは非常に難しい暗号が生成できます。 (もちろん、SSH を利用するときには、このような知識は必要ありませんので、 ご心配無く)

RSA 暗号は、秘密鍵と公開鍵との 2 つを利用します。 このため、公開鍵暗号とも呼ばれます。 まず、鍵の生成を行います。 コマンドラインから以下のように入力しましょう。

$ ssh-keygen

パスフレーズの入力を求められますので、 パスフレーズを入力してください。 すると、.ssh ディレクトリ内に、 id_rsaid_rsa.pub という 2 つのファイルが生成されます。 id_rsa は秘密鍵で、id_rsa.pub は公開鍵です。

鍵の生成ができたら、 公開鍵をリモートホストにコピーします。 .ssh ディレクトリ内にある、authorized_keys というファイルに追加します。 以下のように入力すると、鍵がコピーされます。 (操作としては、id_rsa.pub の内容を authorized_keys の末尾に付け加えています)

$ cat id_rsa.pub >> authorized_keys

ここまでできたら、もう一度リモートホストにログインしてみましょう。

$ ssh ホスト名 -l ユーザー名

今度は、Enter passphrase for RSA key というメッセージが表示されますね。 さきほど入力したパスフレーズを入力してください。 リモートホストに接続されるはずです。

パスワード認証と RSA 認証の違い

一見すると、パスワード認証も RSA 認証も同じようですね。 しかし、実際には異なります。 パスワード認証の場合は、リモートホストとの認証にパスワード自体が使用されます。 一方、RSA 認証の場合は、パスフレーズはローカルで使用され、 リモートホストとの認証には RSA で生成された鍵が利用されます。 認証につかうかぎの複雑さが違います。

パスワードだと、他人にのぞき見されたり、推測されたり、 という可能性がありますが、 RSAを利用すると、RSA鍵そのものを盗まない限りなりすましができなくなっています。


Copyright (C) 2003-2010. ThinkpadでLinux All rights reserved.