🔐 sshコマンドで安全にリモート接続する:ホスト認証と公開鍵認証の仕組み

リモートサーバーに安全に接続したいとき、Linuxで欠かせないのが sshコマンド(Secure Shell) です。
 SSHを使えば、インターネットなどの公開ネットワークを経由しても、通信内容を暗号化して安全に操作できます。

 SSHは標準的に利用できるセキュリティ機能付きのリモート接続ツールで、システム管理者やエンジニアが日常的に利用する大切なコマンドです✨

🔐 sshコマンドとは

ssh コマンド(Secure Shell)は、ネットワーク上で暗号化された安全な通信経路を確立し、
リモートマシンにログインしたり、コマンドを実行したりするためのツールです。

例えば、次のように使います👇

[suzuki@AlmaLinux ~]$ ssh tanaka@192.168.0.10

 この例では、suzuki が自分のPCから、リモートホスト 192.168.0.10 にいる tanaka ユーザーとして接続しています。
通信経路はすべて暗号化されており、途中で盗聴されたり改ざんされたりする心配がありません🔒

⚙️ コマンド書式

ssh [オプション] [ユーザー名@]接続先ホスト名(またはIPアドレス)

🧩 主なオプション一覧

オプション説明
-l ユーザー名接続先のリモートユーザーを指定する。
-p ポート番号接続するポート番号を指定する(デフォルトは22)
-i 秘密鍵ファイル公開鍵認証に使用する秘密鍵ファイルを指定する。
-XX11(GUI)転送を有効にする。
-xX11転送を無効にする。
-Cデータ圧縮を有効にして通信を高速化する。

🧠 例えば「ssh -p 2222 tanaka@server.example.com」とすれば、
通常と異なるポート番号(2222)で接続することもできます。

🔑 ホスト認証の仕組み

SSH接続では、クライアントとサーバーの間で「ホスト認証」という確認を行います。
これは、「接続先サーバーが本物かどうか」を確認するための重要な仕組みです。

初回接続時、SSHクライアントはサーバーから「ホスト公開鍵(Host Key)」を受け取ります。
ユーザーには以下のような確認メッセージが表示されます👇

[suzuki@AlmaLinux ~]$ ssh tanaka@10.0.2.15
The authenticity of host '10.0.2.15 (10.0.2.15)' can't be established.
ED25519 key fingerprint is SHA256:N3+a6TS/PmMLOm3mCnCSvDio06LM3vQyEWyRrkmpd0I.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.2.15' (ED25519) to the list of known hosts.
tanaka@10.0.2.15's password: 
Last login: Sun Dec  7 22:55:41 2025
[tanaka@AlmaLinux ~]$ exit
ログアウト
Connection to 10.0.2.15 closed.
[suzuki@AlmaLinux ~]$ 

👀ポイント
ここで「yes」と答えると、サーバーのホストキーがユーザーの ~/.ssh/known_hosts に保存されます。
以降の接続では、このキーを照合することで、偽装サーバーへの接続を防ぎます。

🧭 公開鍵認証の仕組み

SSHには、より安全な認証方式として「公開鍵認証(Public Key Authentication)」があります。
これは、パスワードを使わずに秘密鍵・公開鍵のペアでログインする方法 です。

要素説明
秘密鍵(private key)クライアント側に安全に保管しておく。絶対に他人に渡さない。
公開鍵(public key)サーバー側に登録する。認証時に照合に使われる。

 クライアントは秘密鍵を保持し、サーバーに登録された公開鍵と一致する場合のみログインを許可します。
これにより、パスワード漏えいのリスクを大幅に軽減できます🔐

🧱 公開鍵認証の設定手順

1️⃣ 鍵ペアを作成

[suzuki@AlmaLinux ~]$ su - tanaka
パスワード:
[tanaka@AlmaLinux ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tanaka/.ssh/id_rsa): 
Created directory '/home/tanaka/.ssh'.
Enter passphrase (empty for no passphrase): # パスフレーズの入力
Enter same passphrase again:                # 再度パスフレーズの入力
Your identification has been saved in /home/tanaka/.ssh/id_rsa
Your public key has been saved in /home/tanaka/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:qw4++oa1cYWEE4uve9I38p3euxFOZuO/UWeOv56xzvs tanaka@AlmaLinux
The key's randomart image is:
+---[RSA 3072]----+
|    .o           |
|   .o..          |
|  . .o .         |
|   .  . .        |
|    .  .S *   . o|
|   .o .  B o . = |
|  .+.+  . + . ...|
|  ooB.oo o o ...+|
|  o*o*+o+ +oo.oOE|
+----[SHA256]-----+

2️⃣ 公開鍵をサーバーにコピー

[tanaka@AlmaLinux ~]$ ssh-copy-id tanaka@10.0.2.15
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/tanaka/.ssh/id_rsa.pub"
The authenticity of host '10.0.2.15 (10.0.2.15)' can't be established.
ED25519 key fingerprint is SHA256:N3+a6TS/PmMLOm3mCnCSvDio06LM3vQyEWyRrkmpd0I.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
tanaka@10.0.2.15's password: # パスワードの入力

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'tanaka@10.0.2.15'"
and check to make sure that only the key(s) you wanted were added.

3️⃣ 接続を確認

[tanaka@AlmaLinux ~]$ ssh tanaka@10.0.2.15
Enter passphrase for key '/home/tanaka/.ssh/id_rsa': # パスフレーズの入力
Last login: Mon Dec  8 01:08:58 2025 from 10.0.2.15
[tanaka@AlmaLinux ~]$ 

[tanaka@AlmaLinux ~]$ exit
ログアウト
Connection to 10.0.2.15 closed.
[tanaka@AlmaLinux ~]$ 

🎉 以後、パスフレーズの入力することで、パスワードを入力せずにぱ安全な接続が可能です。

🔒 通信の暗号化

SSHは、通信内容をすべて暗号化して送受信します。
これにより、ログイン情報や送信データが途中で盗聴されても解読できません。

内部的には、次のような仕組みでセキュリティを保っています👇

暗号化方式役割
公開鍵暗号接続開始時に認証と暗号鍵の交換を行う。
対称鍵暗号実際の通信データを高速に暗号化・復号する。
ハッシュ関数データ改ざんを検出するために使用される。

 このように、SSHは「認証」「暗号化」「整合性確認」の3つの技術を組み合わせて安全な通信を実現しています。

✅ まとめ

  • sshコマンド は、暗号化された安全なリモート接続を提供するツール✨
  • ホスト認証 により、正規サーバーへの接続を保証
  • 公開鍵認証 により、パスワード不要でより強固なセキュリティを実現
  • 通信の暗号化 により、盗聴・改ざんを防止

SSHは、リモートサーバー管理の基本にして最重要スキルです。
まずは ssh tanaka@ホスト名 で安全な接続を体験してみましょう!🚀