自分のPCから別のサーバにアクセスして作業をするときにターミナルやコマンドプロンプトで「ssh」と入力しますよね。あるいはとりあえず入力しろと言われた方も多いのではないでしょうか?

ですがこのSSHというものが一体何なのかよくわからず使ってる人って意外と多い気がします。そこでこの記事ではSSHについてわけも分からず使うことから卒業することを目指してSSHがそんな通信を実現しているのかについて紹介します。
SSHとはリモートのサーバにアクセスする通信方式
SSH(Secure SHell)とはネットワークで繋がれた離れたコンピュータ同士を安全に通信するための通信方式です。
私たちがWebブラウザからWebサーバへアクセスする通信方式であるHTTPと大きな分類では同じです。

SSHの特徴な名前の通り強力な暗号化や認証技術を使うことによって通信を途中で盗聴されないようにできるという特徴があります。
SSHの通信方法
ではSSH接続で離れたサーバにアクセスする際にどのような処理が行われているかをざっくりと押さえましょう。
ホスト認証
まずはSSHで通信するにあたって接続先のホスト(サーバ)の認証を行います。

- クライアントからホストへSSH接続する
SSHでホストサーバにアクセスすると接続時にホストの認証が行われます。
これはうっかり間違えて別のサーバに接続してしまう危険性を排除するためです。 - ホストからクライアントへホスト認証鍵が送られる
接続のリクエストを受けると、サーバからクライアントへホスト認証鍵(公開鍵)が送られます。 - クライアントはホスト認証鍵を自分の鍵と比較して承認
クライアントは自分が保管しているホスト認証鍵と送られた鍵を比較して一致するかどうか確認し、一致した場合ホストの認証を完了します。
初回接続時は接続先のホスト認証鍵を持っておらず鍵の比較ができないので、送られるホスト認証鍵をクライアントに登録してよいかをユーザに確認するメッセージが表示されます。
ユーザ認証
ホスト認証を通過すると次にユーザ認証が行われます。ユーザ認証とはクライアント側のコンピュータを使用する人が本物かどうかを認証します。
ユーザ認証にはパスワード認証と公開鍵認証の2つの方法があります。
パスワード認証は名前の通りパスワードを入力して認証を行います。しかしこの方法はパスワードが推測されてしまうと第3者でもアクセスできてしまうため、あまり好ましい方法ではありません。

そこで2つ目の方法である公開鍵認証方式が使われることが多いです。公開鍵認証を使うことでパスワードを使わず安全に認証を行うことができます。
認証の事前準備としてクライアント側でSSH接続用の公開鍵と秘密鍵のペアを生成し、公開鍵を接続先のホストへ登録する必要があります。

接続先へ公開鍵の送信が完了すればユーザ認証は電子署名の方式で行われます。
送信したいデータをクライアント側の秘密鍵で暗号化して電子署名をしてホスト側へ送信します。受け取ったホストは署名を登録してある公開鍵で復号化してデータを検証し、OKであればログインを許可します。

なお、ユーザ認証の際に秘密鍵を使用する際は事前に設定したパスフレーズを入力する必要があります。自分のPCが乗っ取られた際に悪用されないようにするため最後にパスフレーズの手動入力は欠かせないようですね。
まとめ
SSHは暗号化と認証処理を行うことで安全に離れたサーバに接続するための通信手段でした。鍵を生成したりパスワードを求められたりするのは認証のために必要な手順だったのですね。
コメント