【初心者向け!】SSHとは何か?~仕組みと認証方式~

こんにちは!株式会社テイク-ワのS.Fです。

SSHはサーバーへのログインやGitHubとの連携など、日常的に利用されている技術です。
私自身、普段からSSHを利用しておりますが、「SSH接続時に何が行われているのか」や「公開鍵認証はなぜ安全なのか」を改めて整理したいと思い、本記事を書くことにしました。

SSHの仕組みを正しく理解しておくと、認証エラーや接続トラブルが発生した際にも原因を切り分けやすくなります。
この記事では、SSHの基本的な仕組みと認証方式について、初心者向けにわかりやすく解説します(^^♪

SSHとは何か?

SSH (Secure Shell) とは離れた場所にあるサーバーやコンピューターに安全に接続し、遠隔操作やファイル転送を行うためのプロトコルです。(通信のルールみたいなもの)
通信内容は暗号化されます。

Telnetとの違い
TelnetもSSHと同じく、ネットワーク経由で離れた場所にあるサーバーやコンピューターに遠隔で操作できる仕組みですが、SSHとの違いは通信内容が暗号化されず、平文でそのまま送信することです。そのため、通信内容を盗聴される危険があります。

SSHが提供する「認証」と「暗号化」
SSH接続時のユーザー認証方式には、主に 「公開鍵認証」 と 「パスワード認証」 の2種類があります。
また公開鍵認証では、公開鍵暗号方式と呼ばれる暗号技術が利用されます。

現在広く使用されている代表的なSSH鍵アルゴリズムには以下があります。

  • Ed25519(現在最も推奨されることが多い)
  • ECDSA
  • RSA

SSHではこれらの暗号技術を利用してユーザー認証を行い、さらには通信内容を暗号化することで
安全な接続を実現しています。

SSHの仕組み

続いて、SSH接続の流れについて、①SSH接続の流れ、②サーバーの正当性確認、③暗号通信の開始、④ユーザー認証という順番で説明していこうと思います!

SSH接続の流れ
SSH接続では、まずクライアント(接続する側)がサーバー(接続される側)へ接続要求を送ります。

クライアント:SSHで接続するPC
サーバー:SSH接続を受け付けるコンピューター

サーバーの正当性確認
サーバーはホスト公開鍵を用いて自身が正当なサーバーであることを証明します。
クライアントは受け取ったサーバー公開鍵を、以前保存したもの(known_hosts)やフィンガープリントと照合して正当性を確認します。初回接続ではユーザーがフィンガープリントを確認して信頼する流れです。
これにより、偽サーバーへの接続(なりすまし)を防ぎます。

暗号通信の開始
サーバーの正当性が確認されると、クライアントとサーバーは鍵交換アルゴリズムを使って共通鍵を生成します。
その後、通信内容は暗号化され安全にデータを送受できるようになります。

ユーザー認証
暗号化通信が確立された後、公開鍵認証やパスワード認証によってユーザー本人であることを確認します。

SSHの認証方式

パスワード認証

パスワード認証は、ユーザー名とパスワードを入力してログインする方法が最もシンプルな認証方式です。
通信自体はSSHによって暗号化されるため、パスワードがそのままネットワーク上を流れることはありません。

ただし、推測されやすいパスワードを設定していたり、総当たり攻撃(ブルートフォース攻撃)を受けたりすると、
不正ログインされる危険があります。

公開鍵認証

公開鍵認証では、「公開鍵」と「秘密鍵」のペアを利用して認証を行います。

  • 公開鍵:サーバーに登録しておく鍵
  • 秘密鍵:利用者だけが持つ鍵

サーバーはクライアントが秘密鍵を保有していることを電子署名によって確認します。
サーバーに登録された公開鍵で署名を検証できれば認証成功となります。
秘密鍵そのものがネットワーク上を送信されることはないため、安全性が高い認証方法です。

秘密鍵は第三者に渡らないよう、大切に保管する必要があります!

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

パスワード認証

  • パスワードを入力して認証する
  • 設定が簡単
  • パスワード管理が必要
  • 総当たり攻撃を受ける可能性がある

公開鍵認証

  • 公開鍵・秘密鍵を利用して認証する
  • 初期設定が必要
  • 秘密鍵の管理が必要
  • より安全性が高い

まとめ

SSHは、リモートサーバーへ安全に接続するための仕組みです。
SSHでは通信内容を暗号化するだけでなく、接続先サーバーや利用者の正当性を確認するための認証も行われています。特に現在は、公開鍵認証が広く利用されており、秘密鍵を持つ利用者だけが認証できることで高い安全性を実現しています。

SSHの仕組みを理解しておくと、認証エラーや接続トラブルが発生した際も
素早く原因を把握し対処できるようになるはずです!(^^)!

実際に鍵を作成しながらSSHの動作確認を行ってみるとより理解が深まると思います!ぜひ試してみてください!

参考情報

「SSHって何?」をスッキリ解決!初心者向けSSH接続の基本と仕組み
https://zenn.dev/shunsuke_stack/articles/ea86facdf318ab

SSHとは?仕組みを図解でわかりやすく解説! - カラクリコード
https://karakuri-code.com/entries/6f5e2d1d364ddc1d0adc5e84494619cc

前へ

使っているPCでIPv4 / IPv6それぞれの通信量を計測してみる