プログラミング

【今さら聞けない】SSHの仕組みと用語を解説

どうも、Kohei(@koheinishino_)です。

プログラミングを経験したことのある方であれば、SSHというワードを一度は耳にしたことがあると思います。

具体的には、自分のローカルPCやサーバーからGitHubを連携したり、AWSのEC2に接続する際によく使うのではないでしょうか。

しかし、そのSSHについて

SSHのやり方はある程度知ってるつもりだけど、どういう仕組みで成り立ってるのか考えたことないな…。

SSHの仕組みや用語をザックリ理解できるようになりたい!

と思われている方は意外と多いと思います。私もその一人だったので、自分なりに調べてアウトプットしてみました!

本記事では、「SSHとはそもそも何なのか?」という部分から、関連する用語の解説も交えてSSHの仕組みを解説していきます。細かいところまでは言及せず、SSHの概要を理解するようなイメージで読み進めてほしいです。

記事を読むことで、SSHの仕組みについてザックリと理解できるようになっているはずです。是非最後までご覧ください!

記事の作成にあたり下記のサイトを参考にさせていただきました!ありがとうございます!

SSHとは?

SSHとは「暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル」です。SecureShellの略になります。

簡単に言うと、遠隔からサーバーを安全に操作するための手段ですね!

なぜSSHが必要になるかというと「悪意を持ったユーザーがサーバーに侵入することを防ぐため」です。

SSHが使われる以前の通信ではIDとパスワードを暗号化せずそのままサーバーに送信して認証を行っていたことも多く、その通信の最中に情報を盗まれてしまうリスクが高かったのです。

そこでSSHで通信を行うことによってパスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化できるため、盗聴のリスクを限りなく0に近づけられるということです。

まとめ①

SSH:暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル

SSHが必要な理由:悪意を持ったユーザーがサーバーに侵入することを防ぐため。

SSH接続の仕組み

ここまでSSHとは何なのか、なぜSSHが必要なのかについて解説しました。ここからは具体的にどのようにしてSSHが使われているのかを解説していきます。

SSHでサーバーと通信する際、通信は暗号化され安全に接続することができます。サーバーへ接続できると次はユーザーを認証する必要があるわけですが、SSHにはパスワード認証方式公開鍵認証方式という2つの認証方式があります。

パスワード認証方式

パスワード認証方式とは「ユーザー名とパスワードでログインする認証方式」です。これは普通のWebサービスでもよく使われるので馴染みがありまよね。

しかし、SSHではパスワード認証方式ではなく以降で説明する公開鍵認証方式のほうが推奨されています。なぜならパスワード認証方式の場合、設定によっては総当たりで突破されてしまう可能性が高いからです。

公開鍵認証方式

公開鍵認証方式とは「公開鍵と秘密鍵の2つの鍵(キーペア)を使用した接続方式」です。パスワード認証方式とは異なり、都度パスワードを入力しなくても鍵を持っていれば認証できます。

公開鍵認証方式では複雑なアルゴリズムが使用されているため安全な通信ができるわけですが、アルゴリズムの内容まで踏み込むと記事が長くなってしまうため今回は割愛します。

それではまず、公開鍵と秘密鍵という用語について説明します。

簡単に言うと「誰でも入手できる鍵」が公開鍵で、「絶対に流出させてはいけない鍵」が秘密鍵です。公開鍵を使って暗号化した情報は秘密鍵のみで復号化でき、秘密鍵を使って暗号化した情報は公開鍵のみで復号化できます。

そして、ザックリと下記の手順でサーバーにSSH接続しています。

  1. クライアントで公開鍵と秘密鍵のキーペアを作成し、公開鍵をサーバーに送る。
  2. サーバーは既存のユーザーと公開鍵を紐付けて登録する。
  3. クライアントからサーバーにSSH接続を試みる。
  4. サーバーは乱数と公開鍵で暗号文を作成し、クライアントに送信する。
  5. クライアントは暗号文を受け取り、自身の秘密鍵で復号化して乱数を取得する。乱数をハッシュ化してサーバーに送信する。
  6. サーバーはクライアント側でハッシュ化した乱数を受け取り、自身でハッシュ化した乱数と照合する。
  7. 内容が一致していれば認証成功とし、以降の通信が暗号化される。

④で公開鍵で暗号化された情報を受け渡していますが、上述したとおり公開鍵で暗号化された情報は秘密鍵でしか復号化できないので、仮に盗聴されても問題ないということです。

ここまでの説明で何となくお気づきかと思いますが、公開鍵認証方式では秘密鍵を奪われたりなくしたりするとサーバーに入れなくなるリスクが高いです。なので、クライアント側で秘密鍵を厳重に管理しておく必要があります。

しかし、パスワード認証方式よりも複雑な認証方式であるため安全性が高いと言えます。

まとめ②
  • パスワード認証方式:ユーザー名とパスワードでログインする認証方式
  • 公開鍵認証方式:公開鍵と秘密鍵の2つの鍵(キーペア)を使用した接続方式
  • 公開鍵:誰でも入手できる鍵
  • 秘密鍵:絶対に流出させてはいけない鍵

まとめ:インフラを触るならSSHの仕組みを理解しておこう

SSHの仕組みについて解説してきました。

Webサービスをつくる上でWebサーバーやアプリケーションサーバーの操作は必ずと言っていいほど実施します。そのときに今回の記事の内容を理解しておけば、エラーやトラブルにも対応できると思います。

個人的にはSSHというよりも公開鍵認証についての理解が浅かったので、その部分の知識の復習になりましたw

ABOUT ME
Kohei Nishino
Web系エンジニア、ブロガーです。新卒未経験で開発エンジニアとして大手SIerに入社し約2年で退職→派遣エンジニアとして半年間インフラ構築業務→2020年11月から転職活動中。現在はDevOps系の技術を勉強しており、主にRails、AWS、Docker等の学習内容を発信しています。