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つの主要なフェーズで構成されています。

  1. 接続の確立:TCPポート22(デフォルト)で接続を開始します。
  2. 鍵交換と暗号化の設定:サーバーとクライアント間で暗号化方式と鍵を交換します。
  3. 認証:ユーザー認証を行い、正当なユーザーであることを確認します。

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クライアントが標準でインストールされています。サーバー機能を有効にするには、以下の手順で設定します。

  1. 「システム環境設定」→「共有」を開く
  2. 「リモートログイン」を有効にする

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サーバーの動作をカスタマイズできます。

主な設定項目は以下の通りです。

設定項目説明推奨値
PortSSH接続に使用するポート番号22(デフォルト)または2222など
ProtocolSSHプロトコルのバージョン2(SSHv2のみを使用)
PermitRootLoginrootユーザーの直接ログインを許可するか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サーバーのセキュリティを強化するために、以下の設定を推奨します。

  1. rootログインの制限PermitRootLogin prohibit-passwordまたはPermitRootLogin noに設定します。
  2. パスワード認証の無効化PasswordAuthentication noに設定します。
  3. 特定ユーザーのみ許可AllowUsersで接続を許可するユーザーを制限します。
  4. ポート番号の変更:デフォルトのポート22から変更します(例:2222)。
  5. 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:公開鍵

鍵ペアを作成する際には、以下の点に注意してください。

  1. 鍵の種類:Ed25519(推奨)またはRSA(4096ビット)を使用します。
  2. パスフレーズ:秘密鍵にパスフレーズを設定することを推奨します。
  3. 鍵の保管場所:秘密鍵は厳重に管理し、他人に渡らないようにします。

鍵ペアを作成した後、公開鍵をサーバーに登録する必要があります。以下のコマンドで公開鍵をサーバーにコピーします。

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 2222

rootユーザーの直接ログインを禁止

PermitRootLogin prohibit-password

パスワード認証を無効化

PasswordAuthentication no

公開鍵認証を有効化

PubkeyAuthentication yes

特定のユーザーのみ接続を許可

AllowUsers admin user1

空のパスワードを許可しない

PermitEmptyPasswords no

X11フォワーディングを無効化

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:圧縮を有効化(帯域幅が狭い場合に有効)

鍵認証の設定

鍵認証を使用するには、以下の手順で設定を行います。

  1. 鍵ペアを作成します(既に作成済みの場合はスキップ)。
  2. ssh-keygen -t ed25519 -C "your_email@example.com"
  3. 公開鍵をサーバーにコピーします。
  4. ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.1.100
  5. 接続テストを行います。
  6. ssh myserver

鍵認証が正しく動作している場合、パスワードを入力することなく接続できるはずです。

SSHエージェントの設定

SSHエージェントを使用すると、パスフレーズの入力を省略できます。以下の手順で設定します。

  1. SSHエージェントを起動します。
  2. eval "$(ssh-agent -s)"
  3. 秘密鍵をエージェントに追加します。
  4. ssh-add ~/.ssh/id_ed25519
  5. パスフレーズを入力します。

これにより、一度パスフレーズを入力すれば、その後の接続で再度入力する必要がなくなります。

接続テストとトラブルシュー…

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接続が頻繁に切断される場合は、以下の設定を試してみてください。

  1. ServerAliveIntervalの設定:サーバーへのkeepalive送信間隔を短くします。
  2. ServerAliveInterval 60
  3. TCPKeepAliveの有効化:TCP keepaliveを有効にします。
  4. TCPKeepAlive yes
  5. Compressionの有効化:帯域幅が狭い場合に圧縮を有効にします。
  6. Compression yes
  7. TCPKeepAliveの設定:ネットワークのタイムアウトを延長します。
  8. ClientAliveInterval 300
    ClientAliveCountMax 2

パフォーマンスの最適化

SSH接続のパフォーマンスを向上させるためには、以下の設定を検討してください。

  1. 暗号化アルゴリズムの選択:より高速な暗号化アルゴリズムを使用します。
  2. Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr
  3. MAC(メッセージ認証コード)の選択:高速なMACアルゴリズムを使用します。
  4. MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
  5. 圧縮の有効化:帯域幅が狭い場合に圧縮を有効にします。
  6. Compression yes
  7. 並列処理の有効化:複数の接続を並列で処理します。
  8. 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アドレスやユーザー名などの情報がログに記録されるため、セキュリティ監査が容易になります。

パスワード認証廃止の注意点

  1. 鍵の管理:秘密鍵は厳重に管理し、紛失しないように注意します。
  2. バックアップ:鍵ペアをバックアップしておくことを推奨します。
  3. 複数端末での使用:複数の端末で同じ鍵を使用する場合は、SSHエージェントを活用します。
  4. 緊急時の対応:万が一鍵を紛失した場合に備えて、緊急用のパスワード認証を有効にしておくことも検討します。

鍵ペア認証の設定

鍵ペア認証は、SSH接続のセキュ

この記事で学んだスキルをさらに深めたい方へ

インフラエンジニアのスキルアップに役立つ技術書です。Amazonで探してみましょう。

Amazonアソシエイトプログラムを利用しています。

【編集・制作ポリシー】
本記事はRoute Bloom編集部が公式ドキュメント・技術仕様書の一次情報をもとに作成しています。ITインフラ・技術情報は急速に変化するため、実装前に最新の公式ドキュメントをご確認ください。情報の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。
【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー・技術標準の公式ドキュメントをもとに作成しています。 インフラ・クラウド技術に関する最終判断は実際の環境・バージョンで検証のうえ実施してください。 情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。

編集ポリシー:この記事は、Route Bloom の編集チームが最新情報を元に執筆・監修しています。情報の正確性を保つために定期的な見直しを行っています。

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