SSH接続設定完全ガイド

SSH接続設定完全ガイド:初心者でも安全に設定できる
SSH接続を初めて設定する方は、公開鍵認証方式を採用してください。パスワード認証よりもセキュリティが高く、自動化にも適しているためです。この記事では、SSH接続の基本概念から具体的な設定手順、トラブルシューティングまで、初心者でも理解できるよう丁寧に解説します。Linuxサーバーへのリモートアクセスはもちろん、クラウドサービス(AWS、GCP、Azure)や自宅ネットワーク内の機器への接続方法まで網羅しています。実務で即活用できる実践的な内容となっているため、ぜひ最後までお読みください。
目次
- はじめに:SSH接続の重要性と基本概念
- SSH接続環境の準備:クライアントとサーバーの整備
- SSH鍵ペアの生成と管理:安全な認証基盤の構築
- SSH接続の具体的な設定手順:公開鍵認証の実装
- SSH接続のトラブルシューティング:よくあるエラーと解決策
- SSH接続のセキュリティ強化:ベストプラクティス
- クラウドサービス(AWS/GCP/Azure)でのSSH接続
- まとめ:SSH接続設定のベストプラクティス
SSH接続に関するよくある質問(FAQ)
はじめに:SSH接続の重要性と基本概念
SSH(Secure Shell)は、暗号化された通信路を介してリモートのコンピューターに安全に接続するためのプロトコルです。2023年の調査によると、企業の78%がSSHをリモート管理に利用しており、その信頼性の高さが伺えます(出典: Statista)。SSH接続の主な利点は以下の通りです。
| 利点 | 説明 |
|---|---|
| 暗号化通信 | 通信内容が暗号化されるため、第三者による傍受や改ざんを防止 |
| 認証機能 | 公開鍵認証やパスワード認証により、正規ユーザーのみがアクセス可能 |
| ポート転送 | ローカルポートをリモートサーバーに転送し、安全なトンネルを構築可能 |
| コマンド実行 | リモートサーバー上で直接コマンドを実行し、管理作業を効率化 |
SSH接続には主に2つの認証方式があります。
- パスワード認証:ユーザー名とパスワードで認証。設定が簡単だが、総当たり攻撃に弱い。
- 公開鍵認証:鍵ペア(秘密鍵と公開鍵)を使用して認証。セキュリティが高く、自動化に適している。
本記事では、セキュリティと利便性のバランスが取れた公開鍵認証方式を中心に解説します。パスワード認証は簡単に設定できますが、公開鍵認証の方が推奨される理由は以下の通りです。
- 総当たり攻撃に対して耐性がある
- パスワードレスでログインできるため、自動化スクリプトに適している
- 鍵の長さによってセキュリティレベルを調整可能
それでは、具体的な設定手順に移りましょう。
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接続が可能です。
- Windows Terminal + OpenSSHクライアント(推奨)
- Windows 10(バージョン1809以降)およびWindows 11に標準で搭載
- 設定方法:
設定 → アプリ → オプション機能 → 機能の追加 → OpenSSHクライアント
- PuTTY
- 古くから利用されているSSHクライアント
- 公式サイトからダウンロード可能
- Git Bash
- Git for Windowsに同梱されているbash環境
sshコマンドが利用可能
Windows Terminalを使用する場合の設定手順は以下の通りです。
- Windows TerminalをMicrosoft Storeからインストール
- PowerShellまたはコマンドプロンプトを開き、以下のコマンドでSSH接続を試行
- 初回接続時には、サーバーのフィンガープリントを確認するプロンプトが表示される。
yesを入力して続行
ssh user@server_ip -p 22
サーバー側の準備
サーバー側では、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. ファイアウォールの設定
サーバーにファイアウォールが導入されている場合(例:ufw、firewalld)、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コマンドを使用します。以下の手順で実行します。
- ターミナル(Linux/macOS)またはPowerShell(Windows)を開く
- 以下のコマンドを実行
- 鍵の保存場所を指定するプロンプトが表示される。デフォルトのまま
Enterを押すか、任意のパスを指定 - 秘密鍵にパスフレーズ(任意のパスワード)を設定するプロンプトが表示される。セキュリティを高めるため、パスフレーズを設定することを推奨
ssh-keygen -t ed25519 -C "your_email@example.com"
ここで-t ed25519は鍵の種類を指定しています。ed25519は現代的で安全性の高いアルゴリズムです。
古いシステムとの互換性が必要な場合は、以下のコマンドでRSA鍵を生成します。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
成功すると、以下のような出力が表示されます。
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で使用される鍵の種類とその特徴を以下の表にまとめます。
| 鍵の種類 | アルゴリズム | 鍵長(推奨) | セキュリティレベル | 互換性 |
|---|---|---|---|---|
| ed25519 | EdDSA | 256ビット | 非常に高い | SSH 6.5+(2014年以降) |
| RSA | RSA | 4096ビット以上 | 高い | 広く普及 |
| ECDSA | Elliptic Curve | 256ビット以上 | 高い | SSH 5.7+ |
| DSA | DSA | 1024ビット | 低い(非推奨) | 古いシステム |
注意事項:
DSAは安全性が低いため、使用しないでください。RSAは幅広い互換性がありますが、鍵長は4096ビット以上を推奨します。ed25519は現代的で安全性が高く、推奨されるアルゴリズムです。
鍵の管理とバックアップ
生成した鍵ペアは、以下の点に注意して管理します。
- 秘密鍵の保護
- 秘密鍵は
~/.ssh/ディレクトリに保存されます。このディレクトリのパーミッションを以下のように設定します。
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519
- 秘密鍵は
- 秘密鍵を他人に渡したり、クラウドストレージにアップロードしたりしないこと。
- 定期的に秘密鍵のバックアップを取る場合は、暗号化された外部ストレージに保存する。
- 鍵のローテーション
- 定期的に鍵を更新することでセキュリティを維持します。例えば、1年に1回程度。
- 古い鍵はサーバーから削除し、新しい鍵に置き換えます。
- 鍵の削除
- 不要になった鍵は
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コマンドが利用できない場合や、サーバーに直接ログインできない場合は、以下の手順で公開鍵を配布します。
- クライアント側で公開鍵の内容を表示
- 出力された公開鍵の内容をコピー
- サーバーにSSH接続(パスワード認証)
- サーバー上で
~/.sshディレクトリを作成(存在しない場合) authorized_keysファイルに公開鍵を追記
cat ~/.ssh/id_ed25519.pub
出力例:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMJvJQkLJQkLJQkLJQkLJQkLJQkLJQkLJQkLJQkLJQ user@example.com
ssh user@server_ip
mkdir -p ~/.ssh chmod 700 ~/.ssh
echo "公開鍵の内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
sshd_configの最適化
サーバー側のSSHサーバー設定ファイル/etc/ssh/sshd_configを編集し、セキュリティと利便性を向上させます。以下の設定項目を推奨します。
注意:編集後は必ずsudo systemctl restart sshdでSSHサーバーを再起動し、設定を反映させます。
| 設定項目 | 推奨値 | 説明 |
|---|---|---|
| Port | 2222(任意のポート) | デフォルトのポート22から変更し、総当たり攻撃を回避 |
| Protocol | 2 | SSHプロトコルのバージョン2のみを使用(バージョン1は非推奨) |
| PermitRootLogin | no | rootユーザーでの直接ログインを禁止 |
| PasswordAuthentication | no | パスワード認証を無効化(公開鍵認証のみを許可) |
| PubkeyAuthentication | yes | 公開鍵認証を有効化 |
| ClientAliveInterval | 300 | アイドル状態のクライアントとの接続を5分(300秒)で切断 |
| MaxAuthTries | 3 | 認証試行回数を3回に制限 |
| AllowUsers | user1 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
- 秘密鍵のパーミッションを
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エージェントを起動
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接続を試み、新しいホスト鍵を受け入れる
- ネットワークが安全か確認
- サーバーのホスト鍵を再確認
5. Permission…
エラー内容:
Permission denied (password).
原因と解決策:
- パスワード認証が無効化されている
sshd_config【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。ABOUT ME




