「VPSを借りたけど、どうやって接続するの?」「パスワード認証は危険って聞いたけど、公開鍵認証ってどうやるの?」
この記事では、LinuxサーバーへのSSH接続の基本と、セキュリティの高い公開鍵認証の設定方法を完全解説します。インフラエンジニアの日常業務で毎日使う知識です。
SSHとは?
SSH(Secure Shell)は、ネットワーク越しに別のコンピューター(サーバー)へ安全に接続するためのプロトコル(通信規格)です。通信内容が暗号化されるため、パスワードやコマンドが盗聴されません。
以前使われていた telnet は通信が暗号化されていないため現在はほぼ使われず、SSHが標準となっています。デフォルトのポートは 22番 です。
基本的な接続方法
# 基本構文
$ ssh [ユーザー名]@[ホスト名またはIPアドレス]
# 例:IPアドレスで接続
$ ssh user@192.168.1.100
# 例:ホスト名で接続
$ ssh user@example.com
# 別ポートを指定(デフォルトは22番)
$ ssh -p 2222 user@example.com
# 初めて接続するとフィンガープリントの確認が出る
The authenticity of host 'example.com' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
初回接続時に表示されるフィンガープリントの確認は、接続先が本物のサーバーかを確認するセキュリティ機能です。「yes」と入力すると ~/.ssh/known_hosts にホスト情報が保存され、次回以降は表示されません。
パスワード認証 vs 公開鍵認証
| 項目 | パスワード認証 | 公開鍵認証 |
|---|---|---|
| セキュリティ | △(ブルートフォース攻撃に脆弱) | ◎(秘密鍵がネットワークに流れない) |
| 利便性 | ○(設定不要) | ○(設定後はパスワード不要) |
| 推奨度 | 開発・学習環境のみ | 本番サーバーでは必須 |
公開鍵認証の仕組み
公開鍵認証では「公開鍵」と「秘密鍵」のペアを使います。南京錠(公開鍵)と鍵(秘密鍵)のイメージです。公開鍵はサーバーに事前登録し、秘密鍵は手元だけに保管します。

公開鍵認証の設定手順
ステップ1:鍵ペアを生成する
クライアント(手元のPC)で鍵ペアを生成します。現在は ed25519 アルゴリズムが推奨されています(RSAより高速・安全)。
# ed25519鍵を生成(推奨)
$ ssh-keygen -t ed25519 -C "your_email@example.com"
# RSA 4096bit鍵を生成(レガシーシステム対応が必要な場合)
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 実行すると以下を聞かれる
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519): # Enterでデフォルト
Enter passphrase (empty for no passphrase): # パスフレーズ設定(推奨)
Enter same passphrase again:
⚠️ パスフレーズは設定することを強く推奨します。秘密鍵ファイルが盗まれた場合でも、パスフレーズがあれば不正利用を防げます。
ステップ2:公開鍵をサーバーに登録する
ssh-copy-id コマンドを使うと、公開鍵を自動でサーバーの ~/.ssh/authorized_keys に追記できます。
# ssh-copy-idを使う方法(最も簡単)
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@example.com
# 手動で行う場合(ssh-copy-idが使えない環境向け)
$ cat ~/.ssh/id_ed25519.pub | ssh user@example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
ステップ3:公開鍵認証で接続を確認する
# 公開鍵認証で接続(パスワードなしでログインできるはず)
$ ssh user@example.com
# 特定の秘密鍵を指定して接続
$ ssh -i ~/.ssh/id_ed25519 user@example.com
~/.ssh/ ディレクトリの構成

~/.ssh/config でSSH接続を便利にする
~/.ssh/config ファイルに接続設定を書いておくと、長いコマンドを毎回打つ手間が省けます。
# ~/.ssh/config の設定例
Host myserver
HostName 192.168.1.100
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519
Host work-server
HostName work.example.com
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_work
# 設定後はホスト名だけで接続できる
$ ssh myserver # ssh ubuntu@192.168.1.100 と同じ
$ ssh work-server # ssh -p 2222 deploy@work.example.com と同じ
config ファイルのパーミッションは 600 に設定してください。
$ chmod 600 ~/.ssh/config
SSHコマンド早見表

セキュリティ強化:パスワード認証を無効にする
公開鍵認証の設定が完了したら、サーバー側でパスワード認証を無効にするとセキュリティが大幅に向上します。/etc/ssh/sshd_config を編集します。
# /etc/ssh/sshd_config の設定
PasswordAuthentication no # パスワード認証を無効化
PubkeyAuthentication yes # 公開鍵認証を有効化
PermitRootLogin no # rootでの直接ログインを禁止
Port 22 # ポート番号(変更も検討)
# 設定変更後はSSHサービスを再起動
$ sudo systemctl restart sshd
⚠️ 注意:パスワード認証を無効にする前に、必ず公開鍵認証でのログインが成功することを別のターミナルで確認してください。設定ミスで締め出されるリスクがあります。
まとめ:この記事で学んだこと
- SSHはネットワーク越しに暗号化された安全な接続を提供するプロトコル(デフォルト22番ポート)
- 公開鍵認証はパスワード認証より安全。本番サーバーでは必須
- 鍵の生成:
ssh-keygen -t ed25519(ed25519を推奨) - 公開鍵の登録:
ssh-copy-id user@hostが最も簡単 ~/.ssh/configを活用すると接続が便利になる- 秘密鍵(
id_ed25519)のパーミッションは600必須 - 公開鍵認証の確認後、パスワード認証を無効にするとセキュリティが向上
関連記事
▶ 関連記事:aptパッケージ管理完全ガイド【Ubuntu/Debian系】
▶ ネットワークコマンド入門【ping/curl/wget/ss/ip】
▶ Linuxユーザー・グループ管理【useradd/usermod完全解説】
📋 Linux入門チートシート完全版で全コマンドを一気に復習できます。



コメント