SSH接続設定完全ガイド:初心者でも安全に設定できる

SSH接続を初めて設定する方は、公開鍵認証方式を採用してください。パスワード認証よりもセキュリティが高く、自動化にも適しているためです。この記事では、SSH接続の基本概念から具体的な設定手順、トラブルシューティングまで、初心者でも理解できるよう丁寧に解説します。Linuxサーバーへのリモートアクセスはもちろん、クラウドサービス(AWS、GCP、Azure)や自宅ネットワーク内の機器への接続方法まで網羅しています。実務で即活用できる実践的な内容となっているため、ぜひ最後までお読みください。


目次


はじめに:SSH接続の重要性と基本概念

SSH(Secure Shell)は、暗号化された通信路を介してリモートのコンピューターに安全に接続するためのプロトコルです。2023年の調査によると、企業の78%がSSHをリモート管理に利用しており、その信頼性の高さが伺えます(出典: Statista)。SSH接続の主な利点は以下の通りです。

利点説明
暗号化通信通信内容が暗号化されるため、第三者による傍受や改ざんを防止
認証機能公開鍵認証やパスワード認証により、正規ユーザーのみがアクセス可能
ポート転送ローカルポートをリモートサーバーに転送し、安全なトンネルを構築可能
コマンド実行リモートサーバー上で直接コマンドを実行し、管理作業を効率化

SSH接続には主に2つの認証方式があります。

  • パスワード認証:ユーザー名とパスワードで認証。設定が簡単だが、総当たり攻撃に弱い。
  • 公開鍵認証:鍵ペア(秘密鍵と公開鍵)を使用して認証。セキュリティが高く、自動化に適している。

本記事では、セキュリティと利便性のバランスが取れた公開鍵認証方式を中心に解説します。パスワード認証は簡単に設定できますが、公開鍵認証の方が推奨される理由は以下の通りです。

  1. 総当たり攻撃に対して耐性がある
  2. パスワードレスでログインできるため、自動化スクリプトに適している
  3. 鍵の長さによってセキュリティレベルを調整可能

それでは、具体的な設定手順に移りましょう。


SSH接続環境の準備:クライアントとサーバーの整備

SSH接続を始める前に、クライアント(接続元)とサーバー(接続先)の環境を整備します。クライアントはWindows、macOS、Linuxなど様々なOSに対応していますが、本記事では主にLinuxとWindowsを対象とします。

Linuxクライアントの設定

Linux環境では、ほとんどのディストリビューションにSSHクライアント(sshコマンド)が標準でインストールされています。以下のコマンドでバージョンを確認できます。

ssh -V

例えば、Ubuntu 22.04 LTSでは以下のように表示されます。

OpenSSH_8.9p1 Ubuntu-3ubuntu0.4, OpenSSL 3.0.2 15 Mar 2022

SSHクライアントがインストールされていない場合は、以下のコマンドでインストールします。

  • Debian/Ubuntu系:sudo apt update && sudo apt install openssh-client
  • RHEL/CentOS系:sudo yum install openssh-clients
  • Fedora系:sudo dnf install openssh-clients

インストール後、以下のコマンドでSSH接続のテストができます。

ssh user@server_ip -p 22

ここでuserはサーバー上のユーザー名、server_ipはサーバーのIPアドレス、-p 22はポート番号(デフォルトは22)です。

Windowsクライアントの設定

Windows環境では、主に以下の3つの方法でSSH接続が可能です。

  1. Windows Terminal + OpenSSHクライアント(推奨)
    • Windows 10(バージョン1809以降)およびWindows 11に標準で搭載
    • 設定方法:設定 → アプリ → オプション機能 → 機能の追加 → OpenSSHクライアント
  2. PuTTY
    • 古くから利用されているSSHクライアント
    • 公式サイトからダウンロード可能
  3. Git Bash
    • Git for Windowsに同梱されているbash環境
    • sshコマンドが利用可能

Windows Terminalを使用する場合の設定手順は以下の通りです。

  1. Windows TerminalをMicrosoft Storeからインストール
  2. PowerShellまたはコマンドプロンプトを開き、以下のコマンドでSSH接続を試行
  3. ssh user@server_ip -p 22
  4. 初回接続時には、サーバーのフィンガープリントを確認するプロンプトが表示される。yesを入力して続行

サーバー側の準備

サーバー側では、SSHサーバー(sshd)が正常に動作している必要があります。以下の手順で確認・設定します。

1. SSHサーバーのインストール

サーバーOSに応じて、以下のコマンドでSSHサーバーをインストールします。

  • Debian/Ubuntu系:sudo apt update && sudo apt install openssh-server
  • RHEL/CentOS系:sudo yum install openssh-server
  • Fedora系:sudo dnf install openssh-server

2. SSHサーバーの起動と自動起動設定

インストール後、SSHサーバーを起動し、システム起動時に自動で起動するように設定します。

sudo systemctl enable --now sshd

状態を確認するには以下のコマンドを実行します。

sudo systemctl status sshd

正常に動作していれば、以下のような出力が表示されます。

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-15 10:00:00 JST; 1h ago

3. ファイアウォールの設定

サーバーにファイアウォールが導入されている場合(例:ufwfirewalld)、SSH接続用のポート(デフォルト:22)を開放します。

  • UFW(Ubuntu/Debian)sudo ufw allow 22/tcp
  • firewalld(RHEL/CentOS)sudo firewall-cmd --add-service=ssh --permanent && sudo firewall-cmd --reload

ファイアウォールの状態を確認するには以下のコマンドを実行します。

sudo ufw status  # UFWの場合
sudo firewall-cmd --list-all  # firewalldの場合

以上で、SSH接続を行うための基本的な環境が整いました。次に、SSH鍵ペアの生成と管理方法について解説します。


SSH鍵ペアの生成と管理:安全な認証基盤の構築

SSH接続のセキュリティを高めるためには、公開鍵認証方式を採用し、鍵ペアを生成することが必須です。鍵ペアは秘密鍵公開鍵の2つで構成され、秘密鍵はクライアント側で厳重に管理し、公開鍵はサーバー側に配置します。

鍵ペアの生成手順

鍵ペアの生成にはssh-keygenコマンドを使用します。以下の手順で実行します。

  1. ターミナル(Linux/macOS)またはPowerShell(Windows)を開く
  2. 以下のコマンドを実行
  3. ssh-keygen -t ed25519 -C "your_email@example.com"

    ここで-t ed25519は鍵の種類を指定しています。ed25519は現代的で安全性の高いアルゴリズムです。

    古いシステムとの互換性が必要な場合は、以下のコマンドでRSA鍵を生成します。

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  4. 鍵の保存場所を指定するプロンプトが表示される。デフォルトのままEnterを押すか、任意のパスを指定
  5. 秘密鍵にパスフレーズ(任意のパスワード)を設定するプロンプトが表示される。セキュリティを高めるため、パスフレーズを設定することを推奨

成功すると、以下のような出力が表示されます。

Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub

生成された鍵ファイルは以下の場所に保存されます。

  • ~/.ssh/id_ed25519:秘密鍵(絶対に他人に漏らさないこと)
  • ~/.ssh/id_ed25519.pub:公開鍵(サーバーに配布するファイル)

鍵の種類とセキュリティレベル

SSHで使用される鍵の種類とその特徴を以下の表にまとめます。

鍵の種類アルゴリズム鍵長(推奨)セキュリティレベル互換性
ed25519EdDSA256ビット非常に高いSSH 6.5+(2014年以降)
RSARSA4096ビット以上高い広く普及
ECDSAElliptic Curve256ビット以上高いSSH 5.7+
DSADSA1024ビット低い(非推奨)古いシステム

注意事項:

  • DSAは安全性が低いため、使用しないでください。
  • RSAは幅広い互換性がありますが、鍵長は4096ビット以上を推奨します。
  • ed25519は現代的で安全性が高く、推奨されるアルゴリズムです。

鍵の管理とバックアップ

生成した鍵ペアは、以下の点に注意して管理します。

  1. 秘密鍵の保護
    • 秘密鍵は~/.ssh/ディレクトリに保存されます。このディレクトリのパーミッションを以下のように設定します。
    • chmod 700 ~/.ssh
      chmod 600 ~/.ssh/id_ed25519
    • 秘密鍵を他人に渡したり、クラウドストレージにアップロードしたりしないこと。
    • 定期的に秘密鍵のバックアップを取る場合は、暗号化された外部ストレージに保存する。
  2. 鍵のローテーション
    • 定期的に鍵を更新することでセキュリティを維持します。例えば、1年に1回程度。
    • 古い鍵はサーバーから削除し、新しい鍵に置き換えます。
  3. 鍵の削除
    • 不要になった鍵はssh-keygen -dコマンドで削除します。

鍵の管理に関する詳細は、OpenSSH公式ドキュメントを参照してください。


SSH接続の具体的な設定手順:公開鍵認証の実装

ここまでで、クライアント側の鍵ペア生成とサーバー側のSSHサーバー設定が完了しました。次に、公開鍵をサーバーに配布し、SSH接続を設定します。以下の手順は、LinuxクライアントからLinuxサーバーへの接続を前提としていますが、Windowsクライアントでも同様の手順で実施できます。

公開鍵のサーバーへの配布

公開鍵をサーバーに配布する方法はいくつかありますが、最も一般的な方法はssh-copy-idコマンドを使用する方法です。このコマンドは、公開鍵をサーバーの~/.ssh/authorized_keysファイルに自動で追加します。

1. ssh-copy-idコマンドの実行

以下のコマンドを実行します。userはサーバー上のユーザー名、server_ipはサーバーのIPアドレスです。

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

実行すると、以下のようなプロンプトが表示されます。

/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
user@server_ip's password:

ここで、サーバーのユーザー名とパスワードを入力します。パスワード認証が成功すると、公開鍵がサーバーに配布されます。

2. 手動での公開鍵配布(ssh-copy-idが利用できない場合)

ssh-copy-idコマンドが利用できない場合や、サーバーに直接ログインできない場合は、以下の手順で公開鍵を配布します。

  1. クライアント側で公開鍵の内容を表示
  2. cat ~/.ssh/id_ed25519.pub

    出力例:

    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMJvJQkLJQkLJQkLJQkLJQkLJQkLJQkLJQkLJQkLJQ user@example.com
  3. 出力された公開鍵の内容をコピー
  4. サーバーにSSH接続(パスワード認証)
  5. ssh user@server_ip
  6. サーバー上で~/.sshディレクトリを作成(存在しない場合)
  7. mkdir -p ~/.ssh
    chmod 700 ~/.ssh
  8. authorized_keysファイルに公開鍵を追記
  9. echo "公開鍵の内容" >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

sshd_configの最適化

サーバー側のSSHサーバー設定ファイル/etc/ssh/sshd_configを編集し、セキュリティと利便性を向上させます。以下の設定項目を推奨します。

注意:編集後は必ずsudo systemctl restart sshdでSSHサーバーを再起動し、設定を反映させます。

設定項目推奨値説明
Port2222(任意のポート)デフォルトのポート22から変更し、総当たり攻撃を回避
Protocol2SSHプロトコルのバージョン2のみを使用(バージョン1は非推奨)
PermitRootLoginnorootユーザーでの直接ログインを禁止
PasswordAuthenticationnoパスワード認証を無効化(公開鍵認証のみを許可)
PubkeyAuthenticationyes公開鍵認証を有効化
ClientAliveInterval300アイドル状態のクライアントとの接続を5分(300秒)で切断
MaxAuthTries3認証試行回数を3回に制限
AllowUsersuser1 user2特定のユーザーのみアクセスを許可

編集例:

sudo nano /etc/ssh/sshd_config

以下の行を追加または編集します。

Port 2222
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ClientAliveInterval 300
MaxAuthTries 3
AllowUsers your_username

編集後、SSHサーバーを再起動します。

sudo systemctl restart sshd

接続テストと動作確認

設定が完了したら、SSH接続をテストします。以下のコマンドで接続を試みます。

ssh -p 2222 user@server_ip

正常に接続できれば、以下のような出力が表示されます。

Enter passphrase for key '/home/user/.ssh/id_ed25519':

ここで秘密鍵のパスフレーズを入力すると、サーバーにログインできます。ログイン後、以下のコマンドで接続元の情報を確認できます。

whoami
pwd
ls -l

接続が成功しない場合は、以下の点を確認します。

  • ファイアウォールでポートが開放されているか
  • sshd_configの設定が正しいか
  • 公開鍵がauthorized_keysに正しく追記されているか
  • 秘密鍵のパーミッションが正しいか(chmod 600 ~/.ssh/id_ed25519

トラブルシューティングの詳細は、トラブルシューティングセクションを参照してください。


SSH接続のトラブルシューティング:よくあるエラーと解決策

SSH接続の設定中や運用中に遭遇する可能性のあるエラーとその解決策を以下にまとめます。エラーの原因を特定し、適切な対処を行うことで、安定したSSH接続を維持できます。

1. Permission…

エラー内容:

Permission denied (publickey).

原因と解決策:

  • 公開鍵がサーバーに配布されていない
    • ~/.ssh/authorized_keysに公開鍵が追記されているか確認
    • ssh-copy-idコマンドが正常に実行されたか確認
  • 秘密鍵のパーミッションが不適切
    • 秘密鍵のパーミッションを600に設定
    • chmod 600 ~/.ssh/id_ed25519
  • sshd_configで公開鍵認証が無効化されている
    • PubkeyAuthentication yesが設定されているか確認
    • SSHサーバーを再起動
    • sudo systemctl restart sshd

2. Connection…

エラー内容:

ssh: connect to host server_ip port 22: Connection refused

原因と解決策:

  • SSHサーバーが起動していない
    • SSHサーバーの状態を確認
    • sudo systemctl status sshd
    • 起動していない場合は起動
    • sudo systemctl start sshd
  • ファイアウォールでポートがブロックされている
    • ファイアウォールの設定を確認
    • ポートを開放
    • sudo ufw allow 2222/tcp  # ポート2222の場合
  • ポート番号が間違っている
    • サーバー側のsshd_configで設定したポート番号を使用
    • ssh -p 2222 user@server_ip

3. Agent admi…

エラー内容:

Agent admitted failure to sign.

原因と解決策:

  • SSHエージェントに秘密鍵が追加されていない
    • SSHエージェントに秘密鍵を追加
    • ssh-add ~/.ssh/id_ed25519
    • パスフレーズを入力
  • SSHエージェントが起動していない
    • SSHエージェントを起動
    • eval "$(ssh-agent -s)"
    • 秘密鍵を追加

4. Host key v…

エラー内容:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

原因と解決策:

  • サーバーのホスト鍵が変更された
    • サーバーの再インストールやSSHサーバーの再起動によりホスト鍵が変更された可能性あり
    • ~/.ssh/known_hostsから古いホスト鍵を削除
    • ssh-keygen -R server_ip
    • 再度SSH接続を試み、新しいホスト鍵を受け入れる
  • 中間者攻撃(Man-in-the-Middle Attack)の可能性
    • ネットワークが安全か確認
    • サーバーのホスト鍵を再確認

5. Permission…

エラー内容:

Permission denied (password).

原因と解決策:

  • パスワード認証が無効化されている
    • sshd_config 【編集・制作ポリシー】
      本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。