SSHとは?仕組みを図解で説明〜接続の流れと公開鍵認証〜
「SSH」知っていますか?「サーバにSSHで入って」と言われて、何が起きているのか説明できますか?
初めて接続した時に出てくる英語のメッセージに、とりあえず「yes」と答えている人もいるのではないでしょうか。
SSHの仕組みと、新人のうちに気をつけたいことについて、図を使って説明していきます。
目次
SSHとは?
SSH(Secure Shell)は、離れた場所にあるサーバに、通信を暗号化してログインし、操作するためのプロトコル です。
先に、この記事の要点をまとめておきます。
- SSHは、昔のTelnetに代わる、暗号化された遠隔操作の方法
- 使うポートは、標準ではTCP(Transmission Control Protocol)の22番
- 接続の時に、サーバが本物かを確かめてから、ユーザーを確かめる
- ユーザーの確認には、パスワード認証と公開鍵認証がある。安全なのは公開鍵認証
- SFTP(SSH File Transfer Protocol)やSCP(Secure Copy)は、SSHの仕組みの上でファイルを転送している

SSHの役割とTelnetとの違い
手の届かない場所にあるサーバは、ネットワーク越しにログインして操作します。
この遠隔操作には、昔はTelnet(標準のポートは23番)が使われていました。
ところが、Telnetの通信は暗号化されていません。 IDとパスワードも、打ち込んだコマンドも、そのまま流れます。途中で盗み見られると、パスワードがそのまま知られてしまいます。
FTP(File Transfer Protocol)と同じ弱点です。FTPについては、FTPの仕組みを図解で説明で説明しています。
SSHは、通信の全体を暗号化し、途中で書き換えられていないかも確かめます。 さらに、接続先のサーバが本物かも確かめます。
SSHの接続の流れ
SSHは、まず暗号化の準備をして、サーバが本物かを確かめてから、ユーザーを確かめます。

① クライアントがサーバの22番ポートに接続し、使う暗号の種類などを決める
② 鍵交換を行い、通信を暗号化するための共通鍵を作る
③ サーバが、ホスト鍵で署名して本物であることを示す。クライアントは、署名を確かめ、記録してあるホスト鍵と同じかを確かめる
④ ユーザー認証を行う(パスワード認証や公開鍵認証)
⑤ 暗号化された通信の中で、コマンドを実行する
鍵交換(②)
鍵交換では、鍵そのものをネットワークに流さずに、クライアントとサーバで同じ共通鍵を作ります。 Diffie-Hellman鍵交換などの方式が使われます。
この後のやり取りは、パスワードも含めてこの共通鍵で暗号化されます。
共通鍵暗号については、共通鍵暗号と公開鍵暗号の違いを図解で説明で説明しています。
サーバ認証とknown_hosts(③)
相手が偽物のサーバでは意味がないので、SSHのサーバは「ホスト鍵」という鍵のペアを持っています。
サーバは、鍵交換のやり取りの内容に、ホスト鍵の秘密鍵で署名し、ホスト鍵の公開鍵と一緒に送ります。
クライアントは、まずその公開鍵で署名を確かめ、相手がその鍵の持ち主であることを確認します。
次に、その公開鍵が前回と同じかを、手元の known_hosts というファイルで確かめます。known_hostsは、これまでに接続したサーバのホスト鍵を記録しておくファイルです。
署名する内容に鍵交換の値が入っているので、②と③は同じやり取りの中で行われます。
パスワード認証と公開鍵認証の違い
| 項目 | パスワード認証 | 公開鍵認証 |
|---|---|---|
| 必要なもの | パスワード | 秘密鍵(とパスフレーズ) |
| ネットワークに流れるもの | パスワード(暗号化された通信の中) | 秘密鍵で作った署名(と公開鍵) |
| 弱いところ | 推測されやすいパスワードだと破られる | 秘密鍵のファイルを盗まれると危ない |
パスワード認証でも盗み見の心配はありませんが、短いパスワードやよくあるパスワードは、何度も試されると破られます。 そのため、パスワード認証を止めて、公開鍵認証だけを使う設定もよく使われます。
公開鍵認証の仕組み
公開鍵認証では、公開鍵をサーバに登録し、秘密鍵は自分のパソコンだけに置いておきます。

① 自分のパソコンで、鍵のペアを作る
② 公開鍵を、サーバの ~/.ssh/authorized_keys というファイルに登録する
③ ログインする時、クライアントが秘密鍵で署名を作り、公開鍵と一緒にサーバに送る
④ サーバが、登録してある公開鍵で署名を確かめる
⑤ 確かめられたら、ログインできる
ポイントは、秘密鍵そのものはネットワークに流れない ことです。
署名には、鍵交換の時に作られた、その接続だけの値(セッション識別子)が含まれます。そのため、署名を盗み見て別の接続で使い回すこともできません。
秘密鍵で署名して、公開鍵で確かめる考え方は、デジタル署名と同じです。詳しくはデジタル署名の仕組みを図解で説明で説明しています。
よく使うコマンド
ここでは、よく使われている OpenSSH のコマンドを例にします。Windows 10(バージョン1809以降)や Windows 11 でも、コマンドプロンプトや PowerShell から使えます。
サーバに接続する(ssh)
ssh user@example.com
user はユーザー名、example.com は接続先のサーバです。22番以外のポートなら、ssh -p 2222 user@example.com のように -p で指定します。終わる時は exit と打ちます。
私も仕事で、SSH でサーバに接続して、アプリケーションの入れ替えやツールの実行をしてきました。画面は文字だけですが、離れた場所のサーバを手元のパソコンから操作できます。
鍵のペアを作る(ssh-keygen)
ssh-keygen -t ed25519
-t は鍵の種類の指定です。保存先を変えなければ、次の2つのファイルができます。
| ファイル | 中身 | 扱い |
|---|---|---|
~/.ssh/id_ed25519 | 秘密鍵 | 誰にも渡さない |
~/.ssh/id_ed25519.pub | 公開鍵 | サーバに登録する |
ファイルを転送する(scp、sftp)
SCPやSFTPは、SSHの暗号化された接続を使ってファイルを転送します。 認証の方法も、SSHと同じものが使えます。
scp report.txt user@example.com:/home/user/
sftp では、接続してから put(送る)や get(受け取る)のコマンドでファイルをやり取りします。
sftp user@example.com
sftp> put report.txt
22番以外のポートの場合、scp と sftp では大文字の -P を使います。
SFTP・SCPと、FTPS(FTP over SSL/TLS)との違いは、SFTP・FTPS・SCPの違いを図解で解説で説明しています。
新人が気をつけること
初回接続の警告の意味
初めて接続するサーバでは、次のようなメッセージが表示されます。表示は、ソフトやバージョンによって少し違います。
The authenticity of host 'example.com (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
これは「このサーバのホスト鍵はまだ記録がないので、本物か確かめられません」という意味です。
本来は、表示された fingerprint(ホスト鍵を短く表した値)が、管理者から聞いた値と同じかを確かめてから yes と答えます。答えると known_hosts に記録され、次からは出なくなります。

もっと注意したいのは、一度接続したサーバで次の警告が出た時です。
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
「前回記録したホスト鍵と違う鍵が届いた」という意味です。サーバの作り直しでも出ますが、偽物のサーバの可能性もあります。
自分の判断で known_hosts の記録を消して接続し直さず、まず管理者や先輩に確認しましょう。
秘密鍵の扱い
秘密鍵は、サーバに入るための合鍵のようなものです。
- メールやチャットで送らない
- 共有フォルダや、Gitのリポジトリに置かない
- 他の人の秘密鍵を借りない。自分の鍵を作って、公開鍵を登録してもらう
他のユーザーも読める状態の秘密鍵は、OpenSSHが使いません。
漏れたかもしれない時は、すぐに管理者へ伝えましょう。その公開鍵を登録したすべてのサーバから消せば、その秘密鍵ではログインできなくなります。あわせて新しい鍵のペアを作り直しましょう。
パスフレーズを付ける
パスフレーズは、秘密鍵のファイルそのものに付ける合言葉 です。ssh-keygen で鍵を作る時に聞かれます。
付けておけば、ファイルが盗まれても、すぐには使われません。サーバのログインのパスワードとは別のものです。
まとめ
今回はSSHの仕組みについて説明しました。
SSHは、鍵交換で暗号化の準備をして、ホスト鍵でサーバを確かめてから、ユーザーを確かめます。
基本情報技術者試験や応用情報技術者試験に向けては、次の点を押さえておきましょう。
- SSHは暗号化して遠隔操作するプロトコル。Telnetは暗号化しない
- ポートは標準でSSHが22番、Telnetが23番
- 公開鍵認証では、公開鍵をサーバに登録し、秘密鍵は利用者が持つ
- SFTPやSCPは、SSHを使ってファイルを転送する
なお、SSHは特定のサーバへのログインや転送を守る技術です。拠点のネットワーク同士や、外出先のパソコンと会社のネットワークを、通信ごとまとめて安全につなぐなら、VPNの仕組みを図解で説明で紹介しているVPN(Virtual Private Network)を使います。
初回接続のメッセージは、サーバを確かめるための大切な仕組みです。何も考えずに「yes」と答えず、意味を考えてから進みましょう。

