SSH接続の設定方法【2026年6月更新】

SSH接続を正しく設定すれば、リモートサーバーへの安全なアクセスが実現します。サーバー管理者であれば、SSHの基本設定からセキュリティ強化まで、この手順で確実に実装してください。

目次

SSH接続の基本概念

SSHとは何か

SSH接続の仕組み

SSH接続の前提条件

必要な環境

SSHサーバーとクライアン…

SSH接続の設定手順

サーバー側の設定

クライアント側の設定

接続テストの実施

SSH接続のセキュリティ強化

パスワード認証の無効化

公開鍵認証の設定

ファイアウォールの設定

SSH接続のトラブルシュー…

接続エラーの原因と対処法

SSHサービスの再起動方法

まとめ

SSH接続の基本概念

SSHとは何か

SSH(Secure Shell)は、ネットワークを介してリモートコンピューターに安全に接続するための暗号化プロトコルです。1995年に開発されて以来、Telnetやrloginに代わる安全なリモートアクセス手段として広く利用されています。

SSH接続の主な特徴は以下の通りです:

  • データの暗号化による盗聴防止
  • 認証機能によるなりすまし防止
  • ポートフォワーディングによるセキュアなトンネル構築
  • ファイル転送(SCP/SFTP)機能

特に重要なのは、SSHがデフォルトでポート22を使用することです。このポート番号は設定で変更可能ですが、セキュリティ上の理由から推奨される変更方法について後述します。

SSH接続の仕組み

SSH接続は3つの主要な段階で構成されます:

  1. ハンドシェイクフェーズ:接続の開始時に暗号化方式の合意を行います
  2. 認証フェーズ:ユーザーの身元を確認します
  3. セッションフェーズ:実際のコマンド実行やファイル転送を行います

暗号化方式には、一般的に以下の2種類が使用されます:

暗号化方式特徴推奨度
RSA鍵長2048bit以上で安全性が高い⭐⭐⭐⭐⭐
ECDSA楕円曲線暗号で鍵サイズが小さい⭐⭐⭐⭐
Ed25519最新の暗号方式で高速かつ安全⭐⭐⭐⭐⭐

出典: IETF RFC4253 – The Secure Shell (SSH) Transport Layer Protocol

SSH接続の前提条件

必要な環境

SSH接続を実施するには、以下の環境が必要です:

  • SSHサーバー:接続を受け入れる側のマシン(Linux/Unix系OSが一般的)
  • SSHクライアント:接続を開始する側のマシン(Windows/macOS/Linux)
  • ネットワーク接続:両者が通信可能なネットワーク環境
  • 管理者権限:SSHサーバーの設定変更にはroot権限が必要

主要なOSにおけるSSH関連パッケージは以下の通りです:

OSSSHサーバーパッケージSSHクライアントパッケージ
Ubuntu/Debianopenssh-serveropenssh-client
CentOS/RHELopenssh-serveropenssh-clients
macOS(標準搭載)(標準搭載)
Windows 10/11OpenSSH Server(オプション機能)OpenSSH Client(標準搭載)

SSHサーバーとクライアン…

SSH接続におけるサーバーとクライアントの役割を明確に理解しておくことが重要です:

  • SSHサーバー(sshd)
    • ポート22(デフォルト)で接続を待ち受ける
    • 接続要求を受け取り、認証処理を行う
    • 設定ファイルは通常 /etc/ssh/sshd_config に保存
    • サービス名は「sshd」または「ssh」
  • SSHクライアント(ssh)
    • サーバーへの接続を開始する
    • コマンドラインから直接実行可能
    • 設定ファイルは通常 ~/.ssh/config に保存
    • GUIクライアントも存在(例:PuTTY、MobaXterm)

Windows環境では、以下の方法でSSHサーバーを有効化できます:

  1. 設定 → アプリ → オプション機能 → 機能の追加
  2. 「OpenSSH Server」を選択してインストール
  3. サービス管理から「OpenSSH SSH Server」を起動

SSH接続の設定手順

サーバー側の設定

SSHサーバーの設定は /etc/ssh/sshd_config ファイルで行います。以下に基本的な設定手順を示します:

  1. 設定ファイルのバックアップ
    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  2. 設定ファイルの編集
    sudo vi /etc/ssh/sshd_config
  3. 基本設定の変更

    以下のパラメータを編集します:

    パラメータ推奨値説明
    Port2222(任意のポート)デフォルトポート22から変更することでブルートフォース攻撃を軽減
    Protocol2SSHv2のみを使用(SSHv1は脆弱性あり)
    PermitRootLoginnorootユーザーの直接ログインを禁止
    PasswordAuthenticationnoパスワード認証を無効化(公開鍵認証のみ)
    PubkeyAuthenticationyes公開鍵認証を有効化
    ClientAliveInterval300接続維持のためのハートビート間隔(秒)
    ClientAliveCountMax2ハートビートに応答しない場合の最大回数
  4. 設定の反映
    sudo systemctl restart sshd
  5. ファイアウォールの設定

    新しいポート(例:2222)を開放します:

    sudo ufw allow 2222/tcp  # Ubuntu/Debian
    sudo firewall-cmd --add-port=2222/tcp --permanent  # CentOS/RHEL
    sudo firewall-cmd --reload

設定変更後は必ずsshdサービスを再起動してください。設定ミスにより接続できなくなった場合は、バックアップした設定ファイルを使用して復旧します。

クライアント側の設定

SSHクライアントの設定は主に以下の2つの方法で行います:

  1. コマンドラインからの直接接続
    ssh -p 2222 username@server_ip_address

    この方法では、毎回接続時にポート番号とユーザー名、IPアドレスを指定する必要があります。

  2. 設定ファイルによる接続設定

    ~/.ssh/config ファイルを編集して接続設定を保存します:

    Host myserver
        HostName server_ip_address
        Port 2222
        User username
        IdentityFile ~/.ssh/id_ed25519

    この設定により、以下のコマンドで簡単に接続できます:

    ssh myserver

公開鍵認証を使用する場合は、以下の手順で鍵を生成します:

  1. 鍵ペアの生成
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "your_email@example.com"

    鍵の種類には以下の選択肢があります:

    • -t rsa -b 4096:RSA鍵(互換性が高い)
    • -t ecdsa -b 521:ECDSA鍵(鍵サイズが小さい)
    • -t ed25519:Ed25519鍵(最新で安全性が高い)
  2. パスフレーズの設定

    鍵にパスフレーズを設定することで、万が一鍵が漏洩した場合でもセキュリティを保護できます。パスフレーズは10文字以上で設定することを推奨します。

  3. 公開鍵のサーバーへの転送
    ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 username@server_ip_address

    このコマンドにより、公開鍵がサーバーの ~/.ssh/authorized_keys に追加されます。

接続テストの実施

SSH接続が正しく設定されたかどうかを確認するには、以下の手順でテスト接続を行います:

  1. 基本的な接続テスト
    ssh -v -p 2222 username@server_ip_address

    -vオプションにより詳細なログが表示され、接続プロセスを確認できます。

  2. 接続時間の測定
    time ssh -p 2222 username@server_ip_address "echo 'Connection test'"

    接続から切断までの時間を測定し、パフォーマンスを確認します。

  3. ポートフォワーディングのテスト
    ssh -L 8080:localhost:80 -p 2222 username@server_ip_address

    ローカルの8080ポートをリモートの80ポートに転送し、Webサーバーへのアクセスをテストします。

  4. ファイル転送のテスト
    scp -P 2222 /path/to/local/file username@server_ip_address:/path/to/remote/directory

    SCPコマンドによりファイル転送が正常に動作するか確認します。

接続テストでエラーが発生した場合は、以下のポイントを確認してください:

  • ファイアウォールのポート開放が正しく行われているか
  • sshdサービスが正常に起動しているか(sudo systemctl status sshd)
  • 設定ファイルに構文エラーがないか(sudo sshd -t)
  • 接続先のIPアドレスとポート番号が正しいか

SSH接続のセキュリティ強化

パスワード認証の無効化

SSH接続のセキュリティを向上させるためには、パスワード認証を無効化し、公開鍵認証のみを許可することが最も重要です。パスワード認証はブルートフォース攻撃の対象となりやすく、脆弱なパスワードであれば簡単に突破されてしまいます。

パスワード認証を無効化する手順は以下の通りです:

  1. sshd_configの編集
    sudo vi /etc/ssh/sshd_config

    以下の行を設定します:

    PasswordAuthentication no
    ChallengeResponseAuthentication no
    UsePAM no
  2. sshdサービスの再起動
    sudo systemctl restart sshd
  3. パスワード認証の動作確認

    パスワード認証が無効化されたことを確認するには、以下のコマンドを実行します:

    sudo grep -i "passwordauthentication" /etc/ssh/sshd_config

    出力が「no」となっていることを確認してください。

パスワード認証を無効化することで、以下のセキュリティ上のメリットがあります:

  • ブルートフォース攻撃に対する耐性が向上
  • パスワード管理の手間が軽減
  • 二要素認証(2FA)との組み合わせが容易

注意点として、公開鍵認証を設定するまではパスワード認証を無効化しないでください。公開鍵認証が正しく動作しない場合、サーバーにアクセスできなくなる可能性があります。

公開鍵認証の設定

公開鍵認証は、SSH接続における最も安全な認証方法です。鍵ペア(公開鍵と秘密鍵)を使用して認証を行う仕組みで、鍵の長さと暗号化方式によってセキュリティレベルが決まります。

公開鍵認証を設定する手順は以下の通りです:

  1. 鍵ペアの生成(クライアント側)
    ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "your_email@example.com"

    オプションの説明:

    • -t ed25519:鍵の種類(Ed25519が最も安全)
    • -a 100:鍵生成時の反復回数(100回以上を推奨)
    • -f ~/.ssh/id_ed25519:鍵ファイルの保存先
    • -C “your_email@example.com”:コメント(任意)
  2. 鍵ファイルの権限設定
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/id_ed25519
    chmod 644 ~/.ssh/id_ed25519.pub

    SSHは厳格な権限チェックを行うため、適切な権限設定が必要です。

  3. 公開鍵のサーバーへの転送

    以下のいずれかの方法で公開鍵をサーバーに転送します:

    ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip_address
    

    または

    cat ~/.ssh/id_ed25519.pub | ssh username@server_ip_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
  4. sshd_configの編集(サーバー側)
    sudo vi /etc/ssh/sshd_config

    以下の設定を確認または追加します:

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication no
  5. sshdサービスの再起動
    sudo systemctl restart sshd
  6. 接続テスト
    ssh -i ~/.ssh/id_ed25519 username@server_ip_address

鍵の種類と長さによる安全性の比較は以下の通りです:

鍵の種類鍵長安全性互換性生成速度
RSA2048bit以上⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
ECDSA256bit以上⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Ed25519256bit⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

出典: NIST SP 800-131A Revision 2 – Recommendation for the Transition of Cryptographic Algorithms and Key Lengths

鍵の管理に関するベストプラクティス:

  • 秘密鍵は絶対に他者に漏洩させない
  • 鍵にパスフレーズを設定する(10文字以上)
  • 定期的に鍵をローテーションする(1年ごとを推奨)
  • 鍵のバックアップを取得する(暗号化されたストレージに保存)
  • 不要になった鍵は速やかに削除する

ファイアウォールの設定

SSH接続のセキュリティをさらに強化するためには、ファイアウォールによるアクセス制限が効果的です。ファイアウォールを適切に設定することで、許可されたIPアドレスからのみSSH接続を受け入れることができます。

以下に主要なOSにおけるファイアウォール設定方法を示します:

Ubuntu/Debian(ufw)

  1. ufwの有効化
    sudo ufw enable
  2. SSH接続の許可
    sudo ufw allow from trusted_ip_address to any port 2222 proto tcp

    trusted_ip_addressには、接続を許可するIPアドレスを指定します。

  3. その他のポートの拒否
    sudo ufw default deny incoming

    デフォルトで着信接続を拒否し、明示的に許可したポートのみを開放します。

  4. ファイアウォールの状態確認
    sudo ufw status verbose

CentOS/RHEL(firewalld)

  1. firewalldの有効化
    sudo systemctl enable --now firewalld
  2. SSH接続の許可
    sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="trusted_ip_address" port port="2222" protocol="tcp" accept' --permanent
    sudo firewall-cmd --reload
  3. その他のポートの拒否
    sudo firewall-cmd --set-default-zone=drop
  4. ファイアウォールの状態確認
    sudo firewall-cmd --list-all

Windows(Windows Defender ファイアウォール)

  1. ファイアウォールの設定画面を開く

    コントロールパネル → システムとセキュリティ → Windows Defender ファイアウォール → 詳細設定

  2. 着信規則の作成

    新しい規則 → ポート → TCP → 特定のローカルポート:2222 → 接続を許可する → 名前を設定

  3. IPアドレス制限の追加

    作成した規則を右クリック → プロパティ → 範囲タブ → リモートIPアドレスに許可するIPを指定

ファイアウォール設定のベストプラクティス:

  • SSH接続には専用のポート(デフォルトの22から変更)を使用する
  • 接続を許可するIPアドレスを厳格に制限する
  • 不要なポートは完全に閉鎖する
  • ファイアウォールのログを定期的に確認する
  • VPN経由での接続を検討する

ファイアウォール設定により、SSH接続のセキュリティを大幅に向上させることができますが、以下の注意点があります:

  • ファイアウォールの設定ミスにより、サーバーへのアクセスができなくなる可能性がある
  • IPアドレスが動的に変化する環境では、柔軟な設定が必要
  • クラウド環境では、クラウドプロバイダーのファイアウォール(セキュリティグループ)も併用する

SSH接続のトラブルシュー…

接続エラーの原因と対処法

SSH接続時に発生する一般的なエラーとその対処法を以下にまとめます。エラーの原因を特定することで、迅速な解決が可能になります。

エラータイプエラーメッセージ主な原因対処法
接続拒否Connection refusedSSHサービスが起動していない
ファイアウォールでポートが閉鎖されている
ポート番号が間違っている
  • sshdサービスの状態確認:sudo systemctl status sshd
  • ファイアウォールのポート開放確認
  • ポート番号の確認:sudo ss -tulnp | grep sshd
接続タイムアウトConnection timed outネットワーク経路に問題がある
サーバーがダウンしている
ファイアウォールで接続がブロックされている
  • pingテスト:ping server_ip_address
  • ポートスキャン:nc -zv server_ip_address 2222
  • ファイアウォールの設定確認
認証失敗Permission denied (publickey)公開鍵認証が正しく設定されていない
秘密鍵のパスが間違っている
鍵の権限が不適切
  • sshd_configのPubkeyAuthentication設定確認
  • authorized_keysファイルの内容確認:cat ~/.ssh/authorized_keys
  • 秘密鍵のパス確認:ssh -v -i /path/to/key username@server_ip_address
  • 鍵の権限確認:ls -la ~/.ssh/
パスワード認証が機能しないPermission denied (password)sshd_configでPasswordAuthenticationがnoに設定されている
PAMが無効化されている
  • sshd_configのPasswordAuthentication設定確認
  • sshd_configのUsePAM設定確認
鍵が拒否されるServer refused our keyauthorized_keysファイルに鍵が追加されていない
sshd_configのAuthorizedKeysFile設定が間違っている
  • authorized_keysファイルの存在確認
  • sshd_configのAuthorizedKeysFile設定確認
  • sshdのデバッグモード実行:sudo /usr/sbin/sshd -d
接続が切断されるConnection closed by serversshd_configのClientAliveInterval設定が短すぎる
サーバーのリソース不足
  • sshd_configのClientAliveInterval設定確認(300秒以上を推奨)
  • サーバーの負荷状況確認:top または htop

具体的なエラー解決手順の例:

  1. 「Connection refused」エラーの解決
    1. sshdサービスの状態を確認します:
      sudo systemctl status sshd

      アクティブでない場合は起動します:

      sudo systemctl start sshd
    2. ポート2222が開放されているか確認します:
      sudo ss -tulnp | grep sshd

      ポートが異なる場合はsshd_configを編集し、再起動します。

      ABOUT ME
      たから
      サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営