SSHの公開鍵認証とパスワード認証

レンタルサーバーにSSHでログインする場合、公開鍵認証かパスワード認証かのどちらかが利用できます。他にもチャレンジレスポンス認証がありますが、レンタルサーバーでは許可されていないことが多いようです。

パスワード認証

一般的なログインと同じ方法で、ユーザーの特別な操作を必要としません。レンタルサーバーから指定されたアカウントを利用することでログインできます。

アカウントはレンタルサーバーにより異なりますが、サーバーアカウントと同じであったり、FTPアカウントと同じであったります。セキュリティを考慮してか自由にパスワードを設定できないこともあります。

仕組みは簡単ですが、SSH通信で暗号化されているとは言え、パスワードがネットワークに流れるというデメリットはあります。また、ブルートフォースアタック(アカウントの総当たり攻撃)により、単純なアカウントであればサイトを乗っ取られる可能性もあります。

セキュリティを考慮するのであれば、より安全性の高い公開鍵認証を利用しましょう。

公開鍵認証

ユーザー自身で秘密鍵と公開鍵のペア鍵を作成する必要があり、パスワード認証と比較して手間がかかります。

  • 公開鍵
    • その名の通り、暗号化にしか使わないため公開しても問題のない鍵です。といっても、むやみに公開するものではありません。
    • 公開鍵で暗号化したデータは、ペアとなっている暗号鍵でしか復号化できません。
  • 秘密鍵
    • 大事に保管する必要のあるデータです。パスフレーズ(パスワード)により暗号化されています。
    • ペアである公開鍵で暗号化されたデータを復号化できます。
    • 秘密鍵(ファイル)が盗難にあっても、パスフレーズがないため利用できません。とはいえパスワード付きのファイルに過ぎないため、簡単なパスフレーズならすぐに解読されてしまいます。盗難に気付いたらすぐに秘密鍵と公開鍵を変更する必要があります。

事前準備

  1. 秘密鍵と公開鍵を作成します。サーバーで作成する場合もあれば、ユーザーのコンピューター(クライアント)で作成することもあります。
  • サーバーで生成すると秘密鍵がネットワークに流れることになるので、クライアント側で作成するのがよいでしょう。
  1. 秘密鍵をユーザーのコンピューターに、公開鍵をサーバーに保存します。
  2. サーバーに登録されているユーザーと公開鍵とを紐付けします。

ログイン

  1. クライアント(ユーザー)がサーバーへの接続を試みます。
  2. サーバーはランダムなデータを生成し、接続してきたユーザーの公開鍵でそのデータを暗号化します。
  3. 暗号化されたデータをクライアントへ転送します。
  4. クライアントは、パスフレーズで秘密鍵を復号化し、その秘密鍵でデータを復号化します。
  5. 復号化したデータをサーバーへ転送します。
  6. サーバーが双方のデータを比較して、一致していればログインを許可します。

一部省略していますが、概念的にはこのようになります。

公開鍵認証のメリットは、パスワードや秘密鍵(公開鍵)などの重要な情報がネットワーク上に流れないことです。そのため、パスワード認証より安全性が高くなります。また、このような認証方式をチャレンジレスポンス認証とも呼びます。

レンタルサーバーの認証方法は?

SSHに対応しているレンタルサーバーの多くは、どちらの認証にも対応しているようです。

  • パスワード認証
    • さくらインターネット、コアサーバー、バリューサーバー、ロリポップ!、ヘテムル
  • 公開鍵認証
    • さくらインターネット、コアサーバー、バリューサーバー、ロリポップ!、ヘテムル、エックスサーバー

多くのレンタルサーバーではパスワード認証が標準となっていて、公開鍵認証のマニュアルがないこともあります。実際には動作しますが、公開鍵認証は初心者には概念が理解しづらく、おそらくサポートが面倒なのかなとは思います。

レンタルサーバーによって使用感が変わります

今回のタイトルとは関係ありませんが、コアサーバーとバリューサーバーのSSHは少し使いづらいかもしれません。パスワード認証であれ、公開鍵認証であれ、コントロールパネルで接続元(接続許可ホスト)を登録しないと接続できません。

つまりネットワーク環境が変わりIPアドレスが変わると、再度コントロールパネルを操作する必要があります。反映されるまでに数分かかりますし、頻繁にネットワーク環境が変わるなら使い勝手が良くありません。

BLOG

UPDATE