本文へジャンプします。

TOP

用語集

SSH公開鍵認証とは

2022年3月29日


SSH公開鍵認証とは

「Secure Shell(SSH)」とは、ネットワークを通じてセキュアな通信を行うためのプロトコルのひとつで、サーバーへリモートログインする用途で広く使われています。本記事では、SSHによるリモートログインの際に使われる認証方式の1つである、「公開鍵認証」について解説します。

本記事をご覧いただいた方向けに、おすすめの記事をまとめました。こちらもあわせてご確認ください。

SSHとは

SSHとは、暗号技術を用いてセキュアな通信を可能にするプロトコルです。SSHは通信のトンネリングなどさまざまな用途に利用できますが、最も一般的な使い方は、自分のPCからサーバーやルーターへのリモートログインやファイルの転送です。

専用のサーバールームや遠隔地のデータセンター内に設置されているサーバーの操作は、ネットワーク越しにリモートログインして行うのが一般的です。また、クラウド上のサーバーは物理的に触れることができないため、ネットワーク越しに操作するしかありません。

古くは、サーバーへのリモートログインには「Telnet」や「rlogin」、ファイルの転送には「FTP」といったプロトコルが利用されてきました。しかしこれらのプロトコルは、パスワードなどの機密情報を含むデータを、平文でネットワーク上に送出してしまいます。公衆のインターネット上に平文で情報を送出するのは非常に危険なため、現在ではこれらのプロトコルに代わって、暗号化通信が可能なSSHが広く利用されています。

こうした背景から、SSHはサーバー管理者にとって必須の知識の1つとなっています。

SSHの認証方式

SSHを利用すれば、遠隔地にあるサーバーにログインしてシェルを取得し、任意のコマンドを実行して操作することが可能になります。サーバーへのログイン権限を適切に管理して不正ログインを防止するために、認証を要求する必要があります。SSHではユーザー名とパスワードによる認証の他にも、特定のホストからの接続を許可するホストベース認証、使い捨てのパスワードを利用するワンタイムパスワードなど、さまざまな認証方法が利用できます。また、これらを複数組み合わせることも可能です。

繰り返しになりますが、SSHによるリモートログインに成功すると、サーバーのシェル上で任意のコマンドを実行できます。つまりSSHは「行えること」が非常に多岐に渡るため、万が一、不正アクセスを許してしまうと、その被害も大きいものとなります。具体的には、機密情報を盗まれたり、別のサーバーへのさらなる攻撃に利用されるなどの被害が考えられます。そのため、SSHはWebやメールなど普段よく利用するサービス以上にセキュリティに気を配る必要があるのです。

パスワードによる認証は手軽な反面、パスワードに単純な文字列を使用してしまったり、普段よく利用するサービスなどと同じパスワードを使い回してしまうことで、第三者に認証を突破されてしまう可能性が否定できません。そこでインターネットからリモートログインが可能なサーバーでは、パスワード認証を禁止し、より安全な「公開鍵認証」を利用するのがお勧めです。

公開鍵認証の仕組み

「公開鍵認証」とは、「公開鍵」と「秘密鍵」という2種類の鍵のペア(キーペア)を用いて認証を行う方式です。

サーバーにログインするユーザーは、事前に自分用のキーペアを作成し、そのうち公開鍵をサーバーに登録し、秘密鍵は自分のPC内に保管しておきます。サーバーにログインする際には、まず秘密鍵を用いて署名を作成し、サーバーへ送信します。サーバーは受け取った署名をペアとなる公開鍵で検証し、登録済みの公開鍵での検証が成功した場合に限り、ログインを許可するという仕組みです。これらの手続きはSSHクライアントとサーバーの間で自動的に行われるため、ユーザーが意識する必要はありません。

公開鍵認証のポイントは、パスワード認証とは違って、認証に必要な秘密情報(この場合は秘密鍵)そのものはネットワーク上に送出されないという点です。また認証に使われる署名は一時的なものであり、再利用はできないため、署名そのものを盗んでも意味がありません。そのためパスワード認証に比べ、通信の盗聴に強いと言えるでしょう。また仕組み上、秘密鍵を推測して偽造することは非常に困難です。こうした理由により、公開鍵認証を採用することで、パスワード認証よりもセキュリティレベルを上げることができるのです。

また、秘密鍵に「パスフレーズ」を設定して鍵そのものをロックすることもできます。パスフレーズとは、スペースを含んだ複数の単語で構成できるパスワードの一種です。一般的なパスワードはあくまで単一の「単語」ですが、パスフレーズは複雑な「文章」の形を取れるため、より「強い」パスワードを作ることができます。ロックされた秘密鍵は、正しいパスフレーズを入力しない限り使用できないため、公開鍵認証をよりセキュアに運用できるのです。

このように、高いセキュリティを実現できる公開鍵認証ですが、秘密鍵を盗まれてしまっては意味がありません。仮にパスフレーズが設定されていても、秘密鍵を入手できたのならば、総当たり攻撃によって突破できる可能性があります。そのため、秘密鍵の扱いにはくれぐれも十分に注意してください。また、公開鍵認証を導入したからといってそれだけですべての攻撃を防げるわけではありません。一般的にSSHのサービスは不特定多数に対して公開する必要はありませんので、ファイアウォールで接続元を制限するなど、複数のセキュリティ対策を組み合わせることも検討してください。

SSH公開鍵認証を利用するには

SSHでサーバーにリモートログインするためには、SSHクライアントが必要となります。環境がWindowsであれば、PowerShellに含まれているssh.exeコマンドを利用するのが一番手軽でしょう。ただしこれはすべてコマンドでの操作となるため、Tera TermやPuTTYといったGUIベースのターミナルアプリを利用してもよいでしょう。macOSの場合は、Linuxと同様のコマンドライン環境がデフォルトで用意されているため、ターミナルからsshコマンドが利用できます。またmacOS向けのGUIのターミナルアプリとしては、iTerm2などが有名です。

認証に用いるキーペアは、「ssh-keygen」というコマンドを用いて作成します。このコマンドはLinuxはもちろん、WindowsのPowerShellやmacOSのターミナルでも同様に利用できます。またTera Termなどアプリを使えば、GUI上でキーペアを生成できますし、ニフクラをはじめとするクラウドサービスでは、Webのコントロールパネル上でキーペアを生成することもできます。そのためコマンドの使用は必須ではありませんが、設定をすばやく確認・変更するためにはGUIよりもコマンドの方が簡単なケースも多いため、自分の環境における鍵の作成・操作方法は覚えておくのがよいでしょう。特にssh-keygenコマンドは、鍵の生成以外の目的にも利用するため、一度マニュアルに目を通しておくことをお勧めします。

  • このエントリーをはてなブックマークに追加