SSH接続の設定方法完全ガイド【2026年版】

SSH接続の設定方法完全ガイド【2026年版】
SSH接続を正しく設定すれば、リモートサーバーの管理効率が最大50%向上します。セキュリティを確保しながら、暗号化通信で安全にサーバーにアクセスしましょう。
目次
SSH接続とは何か
SSH接続の基本概念
SSH接続の仕組み
SSH接続のメリットとデメ…
SSH接続の事前準備
必要なツールのインストール
サーバー側の準備
クライアント側の準備
SSH接続の設定手順
サーバー側のSSH設定
クライアント側のSSH設定
接続テストとトラブルシュー…
SSH接続のセキュリティ強化
パスワード認証の廃止
鍵ペア認証の設定
ファイアウォール設定
SSH接続の応用技術
ポートフォワーディングの設定
SSHトンネルの活用
SCP/SFTPを使ったフ…
SSH接続のトラブルシュー…
一般的なエラーと対処法
接続が切断される場合の対策
パフォーマンスの最適化
SSH接続とは何か
SSH接続の基本概念
SSH(Secure Shell)は、ネットワーク上で安全にリモート接続を行うための暗号化プロトコルです。1995年に開発されて以来、Telnetやrloginなどの安全でないリモート接続方法に代わる標準的な手段として広く利用されています。
SSH接続の最大の特徴は、通信内容の暗号化です。これにより、第三者による通信内容の傍受や改ざんを防ぐことができます。また、認証機能により、正当なユーザーのみがリモートサーバーにアクセスできるように制御します。
SSH接続は、主に以下の用途で使用されます。
- リモートサーバーの管理とメンテナンス
- コマンドラインインターフェースを介したリモート操作
- 安全なファイル転送(SCP/SFTP)
- ポートフォワーディングを利用したセキュアなトンネル
SSH接続の仕組み
SSH接続は、クライアントとサーバー間で以下の3つの主要なフェーズで構成されています。
- 接続の確立:TCPポート22(デフォルト)で接続を開始します。
- 鍵交換と暗号化の設定:サーバーとクライアント間で暗号化方式と鍵を交換します。
- 認証:ユーザー認証を行い、正当なユーザーであることを確認します。
SSHプロトコルは、以下の主要な暗号化技術を使用しています。
| 技術 | 用途 | 代表的なアルゴリズム |
|---|---|---|
| 鍵交換 | 暗号鍵の安全な交換 | Diffie-Hellman, ECDH |
| 公開鍵暗号 | サーバー認証と鍵交換 | RSA, ECDSA, Ed25519 |
| 対称暗号 | 通信内容の暗号化 | AES, ChaCha20 |
| メッセージ認証コード | データの完全性確認 | HMAC-SHA256 |
SSH接続のセキュリティは、これらの暗号化技術の組み合わせによって実現されています。特に、鍵ペア認証を使用することで、パスワード認証よりも高いセキュリティレベルを実現できます。
SSH接続のメリットとデメ…
SSH接続を使用することには、多くのメリットがありますが、一方でいくつかのデメリットも存在します。以下の表で、SSH接続の主なメリットとデメリットを比較します。
| 項目 | メリット | デメリット |
|---|---|---|
| セキュリティ | 通信内容の暗号化により安全性が高い | 設定が複雑で初心者には難しい |
| 認証 | 鍵ペア認証により強固な認証が可能 | 鍵の管理が煩雑になる |
| 柔軟性 | ポートフォワーディングやトンネル機能により多様な用途に対応 | 特定の環境ではポート22が制限されている |
| パフォーマンス | 暗号化によるオーバーヘッドはあるが、実用上問題ない | 暗号化処理によるCPU負荷が高い場合がある |
| 互換性 | ほとんどのUnix系OSで標準サポート | Windowsでは追加のクライアントソフトウェアが必要 |
SSH接続の最大のメリットはセキュリティの高さです。特に、インターネット経由でサーバーを管理する際には、SSH接続を使用することが強く推奨されます。一方で、設定の複雑さや鍵管理の煩雑さがデメリットとして挙げられますが、これらは適切な手順とツールを使用することで克服可能です。
SSH接続の事前準備
必要なツールのインストール
SSH接続を行うためには、クライアント側とサーバー側の両方で適切なツールをインストールする必要があります。以下に主要なOSごとのインストール方法を示します。
Linux(Ubuntu/Debian)の場合
サーバー側とクライアント側の両方で以下のコマンドを実行します。
sudo apt update sudo apt install openssh-server openssh-client
インストール後、サービスを起動します。
sudo systemctl enable --now ssh
Linux(CentOS/RHEL)の場合
以下のコマンドでインストールします。
sudo yum install openssh-server openssh-clients sudo systemctl enable --now sshd
macOSの場合
macOSにはSSHクライアントが標準でインストールされています。サーバー機能を有効にするには、以下の手順で設定します。
- 「システム環境設定」→「共有」を開く
- 「リモートログイン」を有効にする
Windowsの場合
WindowsにはSSHクライアントが標準で搭載されていますが、サーバー機能を有効にするには以下の手順が必要です。
Windows 10/11(クライアント)
コマンドプロンプトまたはPowerShellで以下のコマンドを実行します。
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*' | Add-WindowsCapability -Online
Windows Server(サーバー)
以下のコマンドでSSHサーバーを有効にします。
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
WindowsでSSHサーバーを使用する場合は、ファイアウォールの設定も忘れずに行ってください。
サーバー側の準備
SSH接続を受け入れるサーバー側では、以下の設定を行う必要があります。
SSHサーバーの基本設定
SSHサーバーの設定ファイルは通常、/etc/ssh/sshd_configにあります。このファイルを編集することで、SSHサーバーの動作をカスタマイズできます。
主な設定項目は以下の通りです。
| 設定項目 | 説明 | 推奨値 |
|---|---|---|
| Port | SSH接続に使用するポート番号 | 22(デフォルト)または2222など |
| Protocol | SSHプロトコルのバージョン | 2(SSHv2のみを使用) |
| PermitRootLogin | rootユーザーの直接ログインを許可するか | prohibit-password(鍵認証のみ許可) |
| PasswordAuthentication | パスワード認証を許可するか | no(鍵認証のみを推奨) |
| PubkeyAuthentication | 公開鍵認証を許可するか | yes |
| AllowUsers | 特定のユーザーのみ接続を許可する | 例: AllowUsers admin user1 |
設定を変更した後は、SSHサービスを再起動します。
sudo systemctl restart sshd
ファイアウォールの設定
SSH接続を許可するために、ファイアウォールでポート22(または変更したポート)を開放する必要があります。
UFW(Ubuntu/Debian)の場合
sudo ufw allow 22/tcp sudo ufw enable
firewalld(CentOS/RHEL)の場合
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
Windows Firewallの場合
コントロールパネルから「Windows Defender ファイアウォール」を開き、「詳細設定」→「受信の規則」で「SSH(ポート22)」を有効にします。
SSHサーバーのセキュリティ強化
SSHサーバーのセキュリティを強化するために、以下の設定を推奨します。
- rootログインの制限:
PermitRootLogin prohibit-passwordまたはPermitRootLogin noに設定します。 - パスワード認証の無効化:
PasswordAuthentication noに設定します。 - 特定ユーザーのみ許可:
AllowUsersで接続を許可するユーザーを制限します。 - ポート番号の変更:デフォルトのポート22から変更します(例:2222)。
- Fail2Banの導入:不正アクセスを自動的にブロックします。
Fail2Banをインストールするには、以下のコマンドを実行します。
sudo apt install fail2ban # Ubuntu/Debian sudo yum install fail2ban # CentOS/RHEL
クライアント側の準備
SSH接続を行うクライアント側でも、いくつかの準備が必要です。主に以下の点に注意してください。
SSHクライアントの基本操作
SSHクライアントは、コマンドラインから以下の形式で接続します。
ssh [ユーザー名]@[サーバーIPアドレス] -p [ポート番号]
例:
ssh admin@192.168.1.100 -p 2222
接続後、パスワード認証を使用する場合はパスワードを入力します。鍵認証を使用する場合は、事前に鍵ペアを作成しておく必要があります。
鍵ペアの作成と管理
SSH鍵ペアを作成するには、以下のコマンドを実行します。
ssh-keygen -t ed25519 -C "your_email@example.com"
このコマンドにより、以下の2つのファイルが生成されます。
~/.ssh/id_ed25519:秘密鍵~/.ssh/id_ed25519.pub:公開鍵
鍵ペアを作成する際には、以下の点に注意してください。
- 鍵の種類:Ed25519(推奨)またはRSA(4096ビット)を使用します。
- パスフレーズ:秘密鍵にパスフレーズを設定することを推奨します。
- 鍵の保管場所:秘密鍵は厳重に管理し、他人に渡らないようにします。
鍵ペアを作成した後、公開鍵をサーバーに登録する必要があります。以下のコマンドで公開鍵をサーバーにコピーします。
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.1.100
これにより、~/.ssh/authorized_keysファイルに公開鍵が追加されます。
SSHエージェントの活用
SSHエージェントを使用すると、パスフレーズの入力を省略して鍵認証を行うことができます。
SSHエージェントを起動するには、以下のコマンドを実行します。
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519
これにより、一度パスフレーズを入力すれば、その後の接続で再度入力する必要がなくなります。
SSHクライアントの設定ファイル
SSHクライアントの設定をカスタマイズするために、~/.ssh/configファイルを作成します。このファイルを使用すると、接続先ごとの設定を簡単に管理できます。
例:
Host myserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519
これにより、以下のコマンドで簡単に接続できるようになります。
ssh myserver
SSH接続の設定手順
サーバー側のSSH設定
サーバー側のSSH設定では、主に以下の手順で設定を行います。
SSHサーバーの基本設定
まず、SSHサーバーの設定ファイル/etc/ssh/sshd_configを編集します。以下は、セキュリティを強化した設定例です。
SSHプロトコルのバージョン(SSHv2のみを使用)
Protocol 2リスニングポート(デフォルトは22)
Port 2222rootユーザーの直接ログインを禁止
PermitRootLogin prohibit-passwordパスワード認証を無効化
PasswordAuthentication no公開鍵認証を有効化
PubkeyAuthentication yes特定のユーザーのみ接続を許可
AllowUsers admin user1空のパスワードを許可しない
PermitEmptyPasswords noX11フォワーディングを無効化
X11Forwarding no最大認証試行回数
MaxAuthTries 3セッションタイムアウト(秒)
ClientAliveInterval 300 ClientAliveCountMax 2
設定を変更した後は、必ずSSHサービスを再起動します。
sudo systemctl restart sshd
ファイアウォールの設定
SSH接続を許可するために、ファイアウォールでポート2222(変更したポート)を開放します。
UFW(Ubuntu/Debian)の場合
sudo ufw allow 2222/tcp sudo ufw enable
firewalld(CentOS/RHEL)の場合
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
SSHサーバーの動作確認
SSHサーバーが正しく動作しているか確認するには、以下のコマンドを実行します。
sudo systemctl status sshd
また、ポートが正しく開放されているか確認するには、以下のコマンドを使用します。
sudo ss -tulnp | grep sshd
出力例:
tcp LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp LISTEN 0 128 [::]:2222 [::]:* users:(("sshd",pid=1234,fd=4))
クライアント側のSSH設定
クライアント側では、以下の手順でSSH接続の設定を行います。
SSHクライアントの基本設定
クライアント側のSSH設定は、主に~/.ssh/configファイルで行います。以下は設定例です。
Host myserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ServerAliveInterval 60
TCPKeepAlive yes
Compression yes
主な設定項目の説明:
- Host:接続先のエイリアス名
- HostName:サーバーのIPアドレスまたはホスト名
- User:接続に使用するユーザー名
- Port:SSH接続に使用するポート番号
- IdentityFile:使用する秘密鍵ファイル
- IdentitiesOnly:指定した鍵のみを使用する
- ServerAliveInterval:サーバーへのkeepalive送信間隔(秒)
- TCPKeepAlive:TCP keepaliveを有効化
- Compression:圧縮を有効化(帯域幅が狭い場合に有効)
鍵認証の設定
鍵認証を使用するには、以下の手順で設定を行います。
- 鍵ペアを作成します(既に作成済みの場合はスキップ)。
- 公開鍵をサーバーにコピーします。
- 接続テストを行います。
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.1.100
ssh myserver
鍵認証が正しく動作している場合、パスワードを入力することなく接続できるはずです。
SSHエージェントの設定
SSHエージェントを使用すると、パスフレーズの入力を省略できます。以下の手順で設定します。
- SSHエージェントを起動します。
- 秘密鍵をエージェントに追加します。
- パスフレーズを入力します。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
これにより、一度パスフレーズを入力すれば、その後の接続で再度入力する必要がなくなります。
接続テストとトラブルシュー…
SSH接続を設定した後は、必ず接続テストを行い、正しく動作することを確認します。また、接続に失敗した場合のトラブルシューティング方法についても理解しておきましょう。
接続テスト
SSH接続が正しく動作するかテストするには、以下のコマンドを実行します。
ssh -v myserver
このコマンドにより、詳細なログが表示され、接続プロセスのどこで問題が発生しているかを特定できます。
接続が成功した場合の出力例:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-86-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Last login: Mon Jan 15 10:00:00 2024 from 192.168.1.50 admin@myserver:~$
一般的な接続エラーと対処法
SSH接続に失敗する主な原因とその対処法を以下の表にまとめます。
| エラー | 原因 | 対処法 |
|---|---|---|
| Connection refused | サーバーがSSHを受け付けていない | サーバー側でsshdが起動しているか確認(sudo systemctl status sshd) |
| Permission denied (publickey) | 公開鍵が正しく設定されていない | サーバーの~/.ssh/authorized_keysを確認し、公開鍵が正しく追加されているか確認 |
| Permission denied (password) | パスワード認証が無効化されている | サーバー側でPasswordAuthentication yesに設定されているか確認 |
| No route to host | ネットワーク接続ができない | pingでサーバーに到達できるか確認(ping 192.168.1.100) |
| Connection timed out | ファイアウォールでポートがブロックされている | ファイアウォールの設定を確認し、ポートを開放 |
| Host key verification failed | サーバーのホストキーが変更された | ~/.ssh/known_hostsから古いホストキーを削除 |
接続が切断される場合の対策
SSH接続が頻繁に切断される場合は、以下の設定を試してみてください。
- ServerAliveIntervalの設定:サーバーへのkeepalive送信間隔を短くします。
- TCPKeepAliveの有効化:TCP keepaliveを有効にします。
- Compressionの有効化:帯域幅が狭い場合に圧縮を有効にします。
- TCPKeepAliveの設定:ネットワークのタイムアウトを延長します。
ServerAliveInterval 60
TCPKeepAlive yes
Compression yes
ClientAliveInterval 300 ClientAliveCountMax 2
パフォーマンスの最適化
SSH接続のパフォーマンスを向上させるためには、以下の設定を検討してください。
- 暗号化アルゴリズムの選択:より高速な暗号化アルゴリズムを使用します。
- MAC(メッセージ認証コード)の選択:高速なMACアルゴリズムを使用します。
- 圧縮の有効化:帯域幅が狭い場合に圧縮を有効にします。
- 並列処理の有効化:複数の接続を並列で処理します。
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
Compression yes
ControlMaster auto ControlPath ~/.ssh/control:%h:%p:%r ControlPersist 1h
SSH接続のセキュリティ強化
パスワード認証の廃止
SSH接続のセキュリティを向上させるために、パスワード認証を廃止し、鍵認証のみを使用することを強く推奨します。パスワード認証は、ブルートフォース攻撃や辞書攻撃に対して脆弱です。
パスワード認証の無効化手順
サーバー側のSSH設定ファイル/etc/ssh/sshd_configを編集します。
パスワード認証を無効化
PasswordAuthentication no空のパスワードを許可しない
PermitEmptyPasswords no
設定を変更した後は、SSHサービスを再起動します。
sudo systemctl restart sshd
これにより、パスワード認証を使用した接続はできなくなり、鍵認証のみが許可されます。
パスワード認証廃止のメリット
- ブルートフォース攻撃への耐性向上:鍵認証では、公開鍵と秘密鍵のペアが一致する必要があるため、ブルートフォース攻撃は事実上不可能です。
- 簡単なパスワード管理:鍵認証では、複雑なパスワードを覚える必要がありません。
- 自動化の容易さ:スクリプトや自動化ツールでSSH接続を使用する際に、パスワード入力の手間が省けます。
- 監査ログの簡素化:鍵認証では、接続元のIPアドレスやユーザー名などの情報がログに記録されるため、セキュリティ監査が容易になります。
パスワード認証廃止の注意点
- 鍵の管理:秘密鍵は厳重に管理し、紛失しないように注意します。
- バックアップ:鍵ペアをバックアップしておくことを推奨します。
- 複数端末での使用:複数の端末で同じ鍵を使用する場合は、SSHエージェントを活用します。
- 緊急時の対応:万が一鍵を紛失した場合に備えて、緊急用のパスワード認証を有効にしておくことも検討します。
鍵ペア認証の設定
鍵ペア認証は、SSH接続のセキュ
この記事で学んだスキルをさらに深めたい方へ
インフラエンジニアのスキルアップに役立つ技術書です。Amazonで探してみましょう。
Amazonアソシエイトプログラムを利用しています。
本記事はRoute Bloom編集部が公式ドキュメント・技術仕様書の一次情報をもとに作成しています。ITインフラ・技術情報は急速に変化するため、実装前に最新の公式ドキュメントをご確認ください。情報の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
本記事はRoute Bloom編集部が各ベンダー・技術標準の公式ドキュメントをもとに作成しています。 インフラ・クラウド技術に関する最終判断は実際の環境・バージョンで検証のうえ実施してください。 情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
編集ポリシー:この記事は、Route Bloom の編集チームが最新情報を元に執筆・監修しています。情報の正確性を保つために定期的な見直しを行っています。




