SSH接続の設定方法徹底解説【2026年最新】

SSH接続の設定方法徹底解説【2026年最新】
SSH接続を正しく設定すれば、リモートサーバーへの安全なアクセスが実現します。サーバー管理者であれば、SSHの基本設定からセキュリティ強化まで一通り理解しておく必要があります。本記事では、SSH接続の設定方法をステップバイステップで解説し、2026年現在の最新ベストプラクティスを紹介します。
—目次
SSH接続の基礎知識
SSHとは何か
SSH接続の仕組み
SSH接続の設定手順
ローカル環境の準備
サーバー側のSSH設定
接続テストとトラブルシュー…
SSHセキュリティの強化方法
パスワード認証の無効化
公開鍵認証の設定
ファイアウォールとポート設定
SSH接続の応用テクニック
ポートフォワーディングの活用
SSH経由でのファイル転送
SSHトンネルの構築
SSH接続のトラブルシュー…
一般的なエラーと解決方法
パフォーマンス最適化
まとめ:SSH接続のベスト…
—SSH接続の基礎知識
SSHとは何か
SSH(Secure Shell)は、ネットワークを介してリモートコンピューターに安全に接続するための暗号化プロトコルです。従来のTelnetやrloginと異なり、通信内容が暗号化されるため、パスワードやデータの盗聴を防ぐことができます。 SSHの主な特徴は以下の通りです:- 暗号化通信によるセキュリティ強化
- 認証機能の多様性(パスワード認証・公開鍵認証)
- ポートフォワーディングによる柔軟なネットワーク構築
- ファイル転送機能(SCP・SFTP)
2026年現在、SSHはLinuxサーバー管理において欠かせないツールとなっており、クラウドサービス(AWS・GCP・Azure)でも標準的に利用されています。
SSH接続の仕組み
SSH接続は以下の3つの主要コンポーネントで構成されています:- SSHクライアント:接続元のコンピューターにインストールされるソフトウェア(例:OpenSSHクライアント)
- SSHサーバー:接続先のコンピューターにインストールされるデーモン(例:sshd)
- SSHプロトコル:暗号化通信を実現する通信規約
接続プロセスは以下のステップで行われます:
- クライアントがサーバーに接続要求を送信
- サーバーが公開鍵を送信(初回接続時のみ)
- クライアントがサーバーの公開鍵を検証
- 認証方式に応じた認証処理(パスワード・公開鍵)
- 暗号化されたセッションの確立
SSHプロトコルには主に2つのバージョンがあります:
| バージョン | 特徴 | セキュリティレベル |
|---|---|---|
| SSH-1 | 古いバージョンで脆弱性が多い | 非推奨(2026年現在) |
| SSH-2 | 現行の標準バージョンで強力な暗号化 | 推奨 |
SSH-2は暗号化アルゴリズムとしてAES・ChaCha20・3DESなどをサポートしており、安全な通信を実現します。
—SSH接続の設定手順
ローカル環境の準備
SSH接続を行う前に、ローカル環境(接続元のコンピューター)を準備します。以下の手順で進めてください:- SSHクライアントのインストール
- Linux/macOS:標準でインストール済み(OpenSSH)
- Windows:以下の方法でインストール
- Windows 10/11:標準機能として利用可能
- 古いWindows:PuTTYのインストール
- SSHキーの生成(公開鍵認証を使用する場合)
ssh-keygen -t ed25519 -C "your_email@example.com"このコマンドで、~/.ssh/ディレクトリに以下のファイルが生成されます:
- id_ed25519:秘密鍵
- id_ed25519.pub:公開鍵
秘密鍵は絶対に他人に渡さないように注意してください。
- SSH configファイルの設定(任意)
~/.ssh/configファイルを編集して、接続設定を簡略化できます:
Host myserver HostName example.com User yourusername Port 22 IdentityFile ~/.ssh/id_ed25519
サーバー側のSSH設定
サーバー側(接続先のコンピューター)でSSHサーバー(sshd)を設定します:- SSHサーバーのインストール
- Ubuntu/Debian:
sudo apt update && sudo apt install openssh-server - CentOS/RHEL:
sudo yum install openssh-server - Amazon Linux:
sudo yum install openssh-server
- Ubuntu/Debian:
- SSHサーバーの起動と自動起動設定
sudo systemctl start sshd sudo systemctl enable sshd自動起動を有効にすることで、サーバー再起動後もSSH接続が可能になります。
- SSH設定ファイルの編集
/etc/ssh/sshd_configファイルを編集します。以下はセキュリティ強化のための設定例です:
# SSHポートの変更(デフォルト22) Port 2222ルートログインの無効化
PermitRootLogin noパスワード認証の無効化(公開鍵認証のみ許可)
PasswordAuthentication no公開鍵認証の許可
PubkeyAuthentication yes空のパスワードの禁止
PermitEmptyPasswords no2分以内に認証が成功しない場合切断
LoginGraceTime 120最大認証試行回数
MaxAuthTries 3最大セッション数
MaxSessions 10 - ファイアウォールの設定
サーバーのファイアウォールでSSHポートを開放します:
- UFW(Ubuntu):
sudo ufw allow 2222/tcp - firewalld(CentOS/RHEL):
sudo firewall-cmd --add-port=2222/tcp --permanent - iptables:
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
- UFW(Ubuntu):
- SSHサーバーの再起動
sudo systemctl restart sshd
接続テストとトラブルシュー…
SSH接続をテストし、問題が発生した場合の対処方法を紹介します:- 接続テスト
ssh -p 2222 yourusername@example.com接続に成功すると、パスワードまたは公開鍵認証が求められます。
- 一般的なエラーと解決方法
エラー 原因 解決方法 Connection refused SSHサーバーが起動していない sshdを起動: sudo systemctl start sshdPermission denied (publickey) 公開鍵認証に失敗 サーバーの~/.ssh/authorized_keysに正しい公開鍵を追加 Port 22: Connection timed out ファイアウォールでポートがブロックされている ファイアウォール設定を確認 Host key verification failed サーバーのホストキーが変更された ~/.ssh/known_hostsから古いキーを削除 - SSH接続の詳細情報取得
接続時の詳細情報を取得するには、-vオプションを使用します:
ssh -v -p 2222 yourusername@example.comこれにより、接続プロセスの各ステップが表示され、問題の特定に役立ちます。
SSHセキュリティの強化方法
SSH接続のセキュリティを強化するための具体的な方法を紹介します。これらの設定は、サーバーへの不正アクセスを防ぐために必須です。パスワード認証の無効化
パスワード認証はブルートフォース攻撃のリスクがあるため、公開鍵認証に置き換えることを推奨します。以下の手順で実施します:
- 公開鍵のサーバーへの配置
ローカル環境で生成した公開鍵(id_ed25519.pub)をサーバーの~/.ssh/authorized_keysに追加します:
cat ~/.ssh/id_ed25519.pub | ssh yourusername@example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" - sshd_configの編集
/etc/ssh/sshd_configで以下の設定を行います:
PasswordAuthentication no ChallengeResponseAuthentication no - SSHサーバーの再起動
sudo systemctl restart sshd - パスワード認証のテスト
パスワード認証が無効化されたことを確認します:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no yourusername@example.comこのコマンドではパスワード認証が失敗するはずです。
注意事項:公開鍵認証を設定する前に、必ずバックアップ用のSSH接続を確保しておいてください。公開鍵認証の設定に失敗すると、サーバーにアクセスできなくなる可能性があります。
公開鍵認証の設定
公開鍵認証はSSHセキュリティの gold standard です。以下の手順で設定します:
- 鍵ペアの生成
ローカル環境で以下のコマンドを実行します:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519このコマンドでは、以下の特徴を持つEd25519鍵を生成します:
- -a 100:鍵生成時の反復回数を100に設定(ブルートフォース攻撃への耐性向上)
- -f ~/.ssh/id_ed25519:鍵ファイル名を指定
- 鍵の配布
生成した公開鍵をサーバーに配置します:
ssh-copy-id -i ~/.ssh/id_ed25519.pub yourusername@example.comこのコマンドにより、公開鍵がサーバーの~/.ssh/authorized_keysに自動的に追加されます。
- 鍵の権限設定
SSHでは厳格なファイル権限が求められます。以下の権限を設定します:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 600 ~/.ssh/id_ed25519 - sshd_configの設定
/etc/ssh/sshd_configで以下の設定を行います:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys AuthenticationMethods publickey - SSHサーバーの再起動
sudo systemctl restart sshd
鍵の管理に関するベストプラクティス:
- 秘密鍵は暗号化して保存(パスフレーズの設定)
- 鍵のバックアップを取得し、安全な場所に保管
- 定期的に鍵をローテーション(1年ごとが推奨)
- 不要になった鍵は速やかに削除
ファイアウォールとポート設定
SSH接続のセキュリティをさらに強化するために、ファイアウォールとポート設定を見直します:
- SSHポートの変更
デフォルトのポート22は攻撃対象になりやすいため、ポート番号を変更します:
Port 2222ポート番号は1024~65535の範囲で選択します。一般的なポート番号の例:
- 2222:一般的な代替ポート
- 22222:よりセキュアな選択肢
- 30000:カスタムポート
- ファイアウォールの設定
サーバーのファイアウォールでSSHポートを開放します:
UFW(Ubuntu/Debian)
sudo ufw allow 2222/tcp sudo ufw enablefirewalld(CentOS/RHEL/Amazon Linux)
sudo firewall-cmd --add-port=2222/tcp --permanent sudo firewall-cmd --reloadiptables(汎用)
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT sudo iptables-save | sudo tee /etc/sysconfig/iptables - IP制限の設定
特定のIPアドレスからのみ接続を許可することで、さらにセキュリティを強化できます:
sudo ufw allow from 192.168.1.100 to any port 2222これにより、指定したIPアドレスからのみSSH接続が可能になります。
- ポートスキャンの防止
ポートスキャンを防ぐために、以下の設定を追加します:
# /etc/ssh/sshd_config LoginGraceTime 1 MaxStartups 2:30:10これにより、不正な接続試行を迅速に切断します。
注意事項:ポートを変更した場合は、必ず新しいポートで接続テストを行ってから古いポートを閉じてください。ポート変更後に接続できなくなると、サーバーにアクセスできなくなる可能性があります。
—SSH接続の応用テクニック
SSH接続の基本機能だけでなく、応用的なテクニックを活用することで、より効率的なリモート作業が可能になります。ポートフォワーディングの活用
ポートフォワーディングを使用すると、ローカルマシンからリモートサーバー経由で別のサービスにアクセスできます。主に以下の3種類があります:
- ローカルポートフォワーディング
ローカルマシンのポートをリモートサーバー経由で別のサーバーに転送します。
ssh -L [local_port]:[destination_host]:[destination_port] [user]@[ssh_server]例:ローカルの8080ポートをリモートサーバー経由でデータベースサーバーの3306ポートに転送
ssh -L 8080:db.example.com:3306 user@example.comこのコマンドを実行すると、ローカルの8080ポートに接続すると、リモートサーバー経由でdb.example.com:3306に接続されます。
- リモートポートフォワーディング
リモートサーバーのポートをローカルマシン経由で別のサーバーに転送します。
ssh -R [remote_port]:[destination_host]:[destination_port] [user]@[ssh_server]例:リモートサーバーの8080ポートをローカルマシン経由でWebサーバーの80ポートに転送
ssh -R 8080:web.example.com:80 user@example.com - 動的ポートフォワーディング
SOCKSプロキシを作成し、任意のポート経由で通信を転送します。
ssh -D [local_port] [user]@[ssh_server]例:ローカルの1080ポートでSOCKSプロキシを作成
ssh -D 1080 user@example.comこのプロキシを使用すると、ブラウザなどのアプリケーションでインターネットアクセスを暗号化できます。
ポートフォワーディングの活用シーン:
- 社内ネットワークにあるデータベースにリモートから安全にアクセス
- ローカル開発環境からクラウド上の本番サーバーに接続
- 制限されたネットワーク環境でのインターネットアクセス
- リモートデスクトップ接続のセキュリティ強化
SSH経由でのファイル転送
SSHにはファイル転送機能が組み込まれており、安全なファイル転送が可能です。主なコマンドは以下の通りです:
- SCP(Secure Copy Protocol)
SSHを使用してファイルをコピーします。
# ローカル → リモート scp [options] [local_file] [user]@[host]:[remote_path]リモート → ローカル
scp [options] [user]@[host]:[remote_file] [local_path]例:ローカルのdata.txtをリモートサーバーの/home/user/にコピー
scp data.txt user@example.com:/home/user/例:リモートサーバーのbackup.tar.gzをローカルにダウンロード
scp user@example.com:/home/user/backup.tar.gz . - SFTP(SSH File Transfer Protocol)
対話的なファイル転送が可能なコマンドです。
sftp user@example.comSFTP接続後は以下のコマンドで操作できます:
- put [local_file]:ローカルファイルをアップロード
- get [remote_file]:リモートファイルをダウンロード
- ls:リモートディレクトリの一覧表示
- cd [directory]:リモートディレクトリの移動
- lcd [directory]:ローカルディレクトリの移動
- rsync over SSH
効率的なファイル同期にrsyncを使用します。
rsync -avz -e ssh /local/path/ user@example.com:/remote/path/このコマンドでは、-aオプションでアーカイブモード、-vで詳細出力、-zで圧縮転送、-e sshでSSH経由の転送を指定しています。
ファイル転送時のベストプラクティス:
- 機密ファイルは必ず暗号化して転送
- 転送中のファイル改ざんを検知するために、事前にチェックサムを計算しておく
- 大容量ファイルの転送は圧縮してから実施
- 転送完了後はファイルの整合性を確認
SSHトンネルの構築
SSHトンネルを使用すると、ローカルマシンとリモートサーバー間で安全な通信路を確立できます。主な用途は以下の通りです:
- 暗号化されたHTTP接続
ローカルのブラウザからHTTP接続を暗号化してリモートサーバー経由でインターネットにアクセスします。
ssh -D 1080 -C -N user@example.comブラウザのプロキシ設定でSOCKS5プロキシ(localhost:1080)を使用すると、全ての通信が暗号化されます。
- リモートデータベースへの接続
ローカルマシンからリモートデータベースに安全に接続します。
ssh -L 3306:localhost:3306 user@example.comこのコマンドにより、ローカルの3306ポートに接続すると、リモートサーバー経由でデータベースに接続されます。
- リモートデスクトップ接続のセキュリティ強化
RDP(Remote Desktop Protocol)をSSHトンネル経由で実行します。
ssh -L 3389:localhost:3389 user@example.comその後、ローカルのリモートデスクトップクライアントでlocalhost:3389に接続します。
- VPNの代替としての利用
SSHトンネルを使用して仮想プライベートネットワーク(VPN)のような機能を実現します。
ssh -w 0:0 user@example.comこのコマンドにより、トンネルインターフェース(tun)が作成され、ローカルとリモート間で安全なネットワーク接続が可能になります。
SSHトンネルの注意事項:
- トンネルは常に暗号化されるため、セキュリティは高いが、パフォーマンスに影響する可能性あり
- トンネル経由の通信はローカルマシンとリモートサーバー間でのみ暗号化されるため、リモートサーバーから先の通信は暗号化されない
- トンネルを長時間維持すると、サーバー側でリソースが消費されるため、必要に応じて接続を切断する
SSH接続のトラブルシュー…
SSH接続で発生する一般的な問題とその解決方法を紹介します。これらのトラブルシューティング手法を身につけておくことで、迅速な問題解決が可能になります。一般的なエラーと解決方法
SSH接続で発生する主なエラーとその解決策を表形式でまとめました:
| エラーメッセージ | 原因 | 解決方法 |
|---|---|---|
| Permission denied (publickey) | 公開鍵認証に失敗 |
|
| Connection refused | SSHサーバーが起動していないか、ファイアウォールでブロックされている |
|
| Host key verification failed | サーバーのホストキーが変更されたか、known_hostsに古いキーが残っている |
|
| ssh: connect to host example.com port 22: Connection timed out | ネットワーク接続に問題があるか、サーバーがダウンしている |
|
| Agent admitted failure to sign using the key | SSHエージェントに鍵が追加されていない |
|
| PTY allocation request failed on channel 0 | 疑似端末(PTY)の割り当てに失敗 |
|
パフォーマンス最適化
SSH接続のパフォーマンスを向上させるための設定とテクニックを紹介します:
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。




