Ubuntu SSH設定完全ガイド|インストール・セキュリティ強化・トラブル対策

目次

1. はじめに

UbuntuでSSHを設定することは、リモートサーバーの管理を行う上で非常に重要です。SSH(Secure Shell)は、安全な暗号化通信を提供するプロトコルであり、遠隔地からサーバーにアクセスし、コマンドを実行したり、ファイルを転送したりするために広く使用されています。

本記事では、UbuntuにおけるSSHの設定方法を、基本的なインストール手順から高度なセキュリティ対策まで詳しく解説します。

1.1 UbuntuでSSHを設定する理由

1.1.1 SSHとは?

SSH(Secure Shell)は、ネットワーク上で安全に通信を行うためのプロトコルです。一般的に、SSHはリモートサーバーへのログイン、ファイル転送、トンネリング(ポートフォワーディング)などに使用されます。SSHは従来のTelnetやFTPとは異なり、通信内容が暗号化されるため、安全性が高いのが特徴です。

1.1.2 UbuntuでSSHが必要なケース

Ubuntuをリモートで管理するシナリオには、以下のようなものがあります。

  • クラウドサーバーの管理:AWSやGCP、Vultrなどのクラウドサービスでは、SSHを使用してリモートでサーバーに接続します。
  • LAN環境でのリモート操作:社内のサーバーや開発用マシンにSSHでアクセスし、リモート作業を行う。
  • IoTデバイスの管理:Raspberry Piなどの組み込みデバイスを遠隔で制御する。

Ubuntuのデフォルト設定では、SSHサーバーが無効になっています。そのため、SSHを利用するためには手動でインストールし、適切に設定する必要があります。

2. SSHの基本設定

UbuntuでSSHを利用するには、SSHサーバー(OpenSSH)をインストールし、適切な設定を行う必要があります。本セクションでは、SSHのインストール方法から、基本的な設定、ファイアウォールの構成、接続方法について詳しく解説します。

2.1 OpenSSHのインストールと起動

2.1.1 OpenSSHとは?

OpenSSH(Open Secure Shell)は、SSHプロトコルを実装したオープンソースのソフトウェアです。リモート接続だけでなく、安全なファイル転送(SCPやSFTP)やポートフォワーディングなどの機能も備えています。

2.1.2 OpenSSHのインストール

Ubuntuでは、SSHサーバーがデフォルトでインストールされていないため、以下のコマンドでインストールを行います。

sudo apt update && sudo apt install -y openssh-server

このコマンドは、パッケージリストを最新の状態に更新し、OpenSSHサーバーをインストールします。

2.1.3 SSHサーバーの起動と自動起動設定

インストールが完了したら、SSHサーバーを起動し、自動起動を有効にします。

sudo systemctl enable --now ssh

enable オプションにより、OS起動時に自動的にSSHサービスが開始されるようになります。

2.1.4 SSHの動作確認

SSHサーバーが正常に動作しているかを確認するには、以下のコマンドを実行します。

systemctl status ssh

以下のような出力が表示されていれば、SSHサーバーは正常に稼働しています。

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago

もし inactive (dead)failed のように表示される場合は、以下のコマンドで手動起動できます。

sudo systemctl start ssh

2.2 ファイアウォール(UFW)の設定

Ubuntuでは、ufw(Uncomplicated Firewall)という簡単に設定できるファイアウォールが用意されています。SSH接続を許可するために、UFWを適切に設定します。

2.2.1 UFWの状態確認

まず、現在のファイアウォールの状態を確認します。

sudo ufw status

出力例(UFWが無効の場合)

Status: inactive

出力例(UFWが有効の場合)

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 SSH通信の許可

SSHのデフォルトポート 22 を許可するには、以下のコマンドを実行します。

sudo ufw allow ssh

または、ポート番号を指定して明示的に許可することもできます。

sudo ufw allow 22/tcp

2.2.3 UFWの有効化

UFWが無効になっている場合は、以下のコマンドで有効にします。

sudo ufw enable

UFWを有効にすると、今後のすべての受信トラフィックがデフォルトでブロックされるため、SSH接続が許可されていることを確認してから有効化してください。

2.2.4 設定の確認

ファイアウォールの設定が反映されているかを再度確認します。

sudo ufw status verbose

出力例

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

このように表示されていれば、SSH接続が許可されています。

2.3 SSHの基本的な接続方法

SSHサーバーが稼働していることを確認したら、クライアントPCから実際に接続してみます。

2.3.1 Linux/macOS からの接続

LinuxやmacOSでは、ターミナルを開いて以下のコマンドを実行します。

ssh ユーザー名@サーバーのIPアドレス

例:

ssh user@192.168.1.100

初回接続時に以下のような警告メッセージが表示されることがあります。

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

yes と入力し、Enterを押せば接続が確立されます。

2.3.2 Windowsからの接続

Windowsでは、PowerShell または PuTTY を利用してSSH接続を行うことができます。

PowerShellを使用する場合
Windows 10以降では、PowerShellにSSHクライアントが標準搭載されています。以下のコマンドを実行すると、SSH接続ができます。

ssh ユーザー名@サーバーのIPアドレス

PuTTYを使用する場合

  1. 公式サイト からPuTTYをダウンロード・インストール
  2. PuTTYを開き、Host Name (or IP address) にサーバーのIPアドレスを入力
  3. Connection typeSSH に設定し、Open をクリック
  4. ユーザー名とパスワードを入力

まとめ

本セクションでは、UbuntuにおけるSSHの基本的な設定手順を解説しました。

  • OpenSSHをインストールし、起動する方法
  • UFWでSSH接続を許可する設定
  • Linux/macOSおよびWindowsでのSSH接続方法

3. SSHのセキュリティ強化

SSHはリモート接続を可能にする便利なツールですが、そのまま使用するとセキュリティリスクが高まる可能性があります。攻撃者はブルートフォース攻撃やポートスキャンを通じて、SSHサーバーを狙うことがよくあります。そのため、安全なSSH環境を構築するために適切なセキュリティ設定を行うことが重要です。

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

デフォルトでは、UbuntuのSSH設定ではrootユーザーでのログインが許可されている場合があります。rootアカウントはシステム全体を管理する強力な権限を持つため、攻撃者に狙われやすいです。rootログインを禁止し、通常のユーザーアカウントを使用することで、セキュリティを向上させます。

3.1.1 設定手順

  1. SSHの設定ファイル /etc/ssh/sshd_config を編集します。
sudo nano /etc/ssh/sshd_config
  1. 以下の行を探し、PermitRootLogin no に変更します。
PermitRootLogin no
  1. ファイルを保存して、SSHサービスを再起動します。
sudo systemctl restart ssh
  1. 変更が適用されたかを確認するには、以下のコマンドを実行します。
sudo grep PermitRootLogin /etc/ssh/sshd_config

出力結果が PermitRootLogin no となっていれば、設定は正しく適用されています。

3.2 パスワード認証の無効化と公開鍵認証の導入

SSHでは、パスワード認証よりも公開鍵認証を使用する方が安全です。公開鍵認証では、パスワードを入力する必要がなく、SSHキーのペア(公開鍵と秘密鍵)を使って認証を行うため、ブルートフォース攻撃のリスクを減らすことができます。

3.2.1 SSH鍵の作成

ローカルPCでSSH鍵を作成します。

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

作成が完了すると、次の2つのファイルが生成されます。

  • 秘密鍵 (id_rsa)ローカルPCに保存(絶対に外部に公開しない)
  • 公開鍵 (id_rsa.pub)サーバー側に登録する

3.2.2 公開鍵をサーバーに転送

以下のコマンドを使用して、公開鍵をサーバーに転送します。

ssh-copy-id ユーザー名@サーバーのIPアドレス

3.2.3 パスワード認証を無効化

SSHの設定ファイルを開きます。

sudo nano /etc/ssh/sshd_config

以下の行を探し、PasswordAuthentication no に変更します。

PasswordAuthentication no

設定を適用するためにSSHを再起動します。

sudo systemctl restart ssh

3.3 特定のユーザーのみSSHアクセスを許可

SSHのセキュリティを向上させるため、SSHに接続できるユーザーを制限することができます。

3.3.1 設定手順

  1. SSHの設定ファイル /etc/ssh/sshd_config を開きます。
sudo nano /etc/ssh/sshd_config
  1. 許可するユーザーを指定します。
AllowUsers ユーザー名1 ユーザー名2
  1. 設定を適用するため、SSHを再起動します。
sudo systemctl restart ssh

3.4 SSHポートの変更

SSHのデフォルトポート (22) は攻撃者に狙われやすいため、ポート番号を変更することでセキュリティを向上させることができます。

3.4.1 設定手順

  1. SSH設定ファイルを開きます。
sudo nano /etc/ssh/sshd_config
  1. Port 22 の行を探し、例えば Port 2200 のように変更します。
Port 2200
  1. 設定を保存し、SSHを再起動します。
sudo systemctl restart ssh

3.4.2 ファイアウォール設定を更新

ポート変更後は、新しいポート番号をUFWで許可します。

sudo ufw allow 2200/tcp

設定が適用されたか確認します。

sudo ufw status

3.5 Fail2Banでブルートフォース攻撃を防ぐ

Fail2Banは、不正なSSHアクセス試行を検出し、一定回数失敗したIPアドレスを一時的にブロックするツールです。

3.5.1 Fail2Banのインストール

sudo apt install fail2ban -y

3.5.2 設定ファイルの作成

Fail2Banの設定ファイルをコピーします。

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

次に、設定ファイルを開きます。

sudo nano /etc/fail2ban/jail.local

以下の設定を変更します。

[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Fail2Banの再起動

設定を適用するためにFail2Banを再起動します。

sudo systemctl restart fail2ban

3.5.4 Banリストの確認

sudo fail2ban-client status sshd

まとめ

本セクションでは、SSHのセキュリティを強化する方法を解説しました。

  • rootログインを禁止
  • パスワード認証を無効化し、公開鍵認証を導入
  • 特定のユーザーのみSSHアクセスを許可
  • SSHポートを変更
  • Fail2Banを導入し、不正アクセスをブロック

これらの対策を講じることで、より安全なSSH環境を構築できます。

4. SSHの高度な設定

SSHの基本設定とセキュリティ強化が完了したら、次は高度な設定を行い、SSHをより便利で安全に活用できるようにします。本セクションでは、Ubuntu 22.10以降の ssh.socket の管理、SSHトンネル(ポートフォワーディング)、複数ポートの待ち受け設定、特定のIPアドレスの許可など、応用的なSSH設定について詳しく解説します。

4.1 Ubuntu 22.10以降の ssh.socket を活用

Ubuntu 22.10以降では、SSHサービスの管理が ssh.service から ssh.socket に変更される場合があります。これは、SSHがリクエストを受け取った際に動的に起動される仕組みであり、リソースの節約につながります。

4.1.1 ssh.socket のステータスを確認

まず、ssh.socket が有効になっているか確認します。

sudo systemctl status ssh.socket

出力例(有効な場合)

● ssh.socket - OpenSSH Server Socket
   Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Fri 2025-02-28 12:00:00 UTC

4.1.2 ssh.socket の有効化と無効化

もし ssh.socket が無効になっている場合、以下のコマンドで有効化できます。

sudo systemctl enable --now ssh.socket

逆に、従来の ssh.service を使用する場合は、以下のように ssh.socket を無効化し、ssh.service を有効化します。

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 SSHトンネル(ポートフォワーディング)

SSHトンネルを利用すると、リモートサーバーとローカルPCの間で安全な通信を確立し、外部ネットワークを介さずにデータを転送することができます。

4.2.1 ローカルポートフォワーディング

リモートサーバー上のデータベースやWebサーバーに安全にアクセスする際に便利です。

例:リモートのMySQLサーバー(3306番ポート)にローカルPCから接続

ssh -L 3306:localhost:3306 ユーザー名@サーバーのIPアドレス

4.2.2 リバースポートフォワーディング

外部のSSHサーバーを介して、内部ネットワークのサービスを公開する場合に使われます。

例:ローカルのWebサーバー(80番ポート)をリモートサーバーの8080番ポートで公開

ssh -R 8080:localhost:80 ユーザー名@サーバーのIPアドレス

4.2.3 ダイナミックポートフォワーディング

SSHをSOCKSプロキシとして利用し、匿名でインターネットを閲覧できます。

例:ローカルPCの1080番ポートでSOCKSプロキシを作成

ssh -D 1080 ユーザー名@サーバーのIPアドレス

4.3 複数ポートでのSSH待ち受け

通常、SSHは1つのポート(デフォルトは22)で動作しますが、複数のポートで待ち受けることで、異なるネットワーク環境に対応できます。

4.3.1 設定手順

  1. /etc/ssh/sshd_config を編集
sudo nano /etc/ssh/sshd_config
  1. 以下の行を追加
Port 22
Port 2200
  1. SSHを再起動
sudo systemctl restart ssh
  1. UFWで新しいポートを許可
sudo ufw allow 2200/tcp

4.4 特定のIPアドレスのみSSHを許可

SSHへのアクセスを制限し、特定のIPアドレスからのみ接続を許可することで、セキュリティを強化できます。

4.4.1 /etc/hosts.allow を設定

特定のIPアドレスからのSSHアクセスのみ許可するには、以下の設定を行います。

sudo nano /etc/hosts.allow

次の行を追加します(192.168.1.100 の部分は許可するIPアドレスに変更)。

sshd: 192.168.1.100

4.4.2 /etc/hosts.deny を設定

すべてのIPアドレスをデフォルトで拒否するには、以下の設定を追加します。

sudo nano /etc/hosts.deny
sshd: ALL

これにより、hosts.allow に記載したIPアドレス以外からのSSH接続は拒否されます。

まとめ

本セクションでは、SSHの高度な設定を解説しました。

  • Ubuntu 22.10以降の ssh.socket の管理
  • SSHトンネル(ポートフォワーディング)を活用した安全な通信
  • 複数ポートでのSSH待ち受け
  • 特定のIPアドレスのみSSHを許可する方法

これらの設定を適用することで、SSHのセキュリティと利便性を向上させることができます。

5. SSHのトラブルシューティング

SSHを設定しても、さまざまな理由で接続できないことがあります。本セクションでは、SSH接続時に発生しやすいトラブルとその解決策を、問題ごとに整理して解説します。

5.1 SSHに接続できない場合

SSHに接続しようとしても Connection refusedタイムアウト などのエラーが発生する場合、いくつかの原因が考えられます。

5.1.1 SSHサービスが動作していない

SSHサーバーが正常に起動していない可能性があります。まず、SSHのステータスを確認しましょう。

sudo systemctl status ssh

解決策:

  • Active: inactive (dead) または failed の場合は、SSHを再起動します。
sudo systemctl restart ssh
  • 再起動後に自動起動を有効にする場合は、次のコマンドを実行します。
sudo systemctl enable ssh

5.1.2 ポートが適切に開放されていない

SSHポートが変更されている場合、接続時に正しいポートを指定する必要があります。

ssh -p 2200 ユーザー名@サーバーのIPアドレス

また、開放されているポートを確認するには、以下のコマンドを使用します。

sudo netstat -tulnp | grep ssh

または、ss コマンドを使用することも可能です。

ss -tulnp | grep ssh

5.1.3 ファイアウォール (UFW) の設定を確認

UFWがSSHの通信をブロックしていないか確認します。

sudo ufw status

SSHが許可されていない場合の解決策:

sudo ufw allow 22/tcp

ポートを変更している場合は、適切なポートを許可します。

sudo ufw allow 2200/tcp

5.2 認証エラーが発生する場合

5.2.1 ユーザー名またはパスワードが間違っている

SSHにログインする際、正しいユーザー名を使用しているか確認してください。

ssh ユーザー名@サーバーのIPアドレス

5.2.2 公開鍵認証が正しく設定されていない

公開鍵認証を使用している場合、サーバー上の ~/.ssh/authorized_keys に正しく公開鍵が登録されているか確認してください。

cat ~/.ssh/authorized_keys

ローカルの公開鍵 (~/.ssh/id_rsa.pub) と一致しているかチェックします。

5.2.3 .ssh ディレクトリのパーミッションが適切でない

SSHの設定では、鍵ファイルや .ssh ディレクトリのパーミッションが厳しく管理されています。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

また、/home/ユーザー名 のディレクトリのパーミッションも適切に設定されているか確認しましょう。

chmod 755 /home/ユーザー名

5.3 SSH接続が不安定・すぐ切断される場合

SSH接続が不安定で、一定時間後に切断される場合、サーバー側またはクライアント側のタイムアウト設定が原因となっている可能性があります。

5.3.1 ClientAliveInterval を調整する

SSHの設定ファイル /etc/ssh/sshd_config を開き、以下のパラメータを追加または変更します。

ClientAliveInterval 60
ClientAliveCountMax 3

設定後、SSHを再起動します。

sudo systemctl restart ssh

5.3.2 クライアント側の設定を変更する

ローカルのSSHクライアントが一定時間後に切断される場合、クライアント側の設定ファイル (~/.ssh/config) に次のような設定を追加すると改善することがあります。

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 SSHログの確認方法

SSHのトラブルを解決するためには、ログを確認することが重要です。

5.4.1 SSHログのリアルタイム確認

SSHのログをリアルタイムで確認するには、以下のコマンドを実行します。

sudo journalctl -u ssh -f

5.4.2 SSHログを過去のデータから確認

過去のログを検索する場合は、次のコマンドを使用します。

sudo cat /var/log/auth.log | grep ssh

また、特定のエラーメッセージを検索することも可能です。

sudo grep "Failed password" /var/log/auth.log

まとめ

本セクションでは、SSHの接続トラブルに関する問題とその解決策を紹介しました。

  • SSHサービスが動作しているか確認
  • ポートが適切に開放されているかチェック
  • ファイアウォールの設定を確認
  • 公開鍵認証が正しく設定されているかチェック
  • タイムアウト問題の解決
  • SSHログを調査して問題の特定

SSHのトラブルは多くの場合、設定ミスやネットワーク環境による影響で発生します。本記事のトラブルシューティングを活用し、迅速に問題を解決してください。

6. FAQ(よくある質問)

SSHの設定や利用について、よくある質問とその解決策をまとめました。SSHをより便利に、安全に使うためのヒントを紹介します。

6.1 SSH接続がタイムアウトする場合の対処法は?

SSH接続が一定時間後に切断される場合、以下の設定を試してください。

6.1.1 サーバー側の設定変更

/etc/ssh/sshd_config を編集し、以下のパラメータを設定します。

ClientAliveInterval 60
ClientAliveCountMax 3

設定後、SSHを再起動します。

sudo systemctl restart ssh

6.1.2 クライアント側の設定変更

ローカルの ~/.ssh/config に以下の設定を追加すると、サーバーからの切断を防げます。

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 パスワードを忘れてSSH接続できない場合の対処法は?

6.2.1 物理的にサーバーへアクセスできる場合

  1. シングルユーザーモードで起動(GRUBメニューで recovery mode を選択)
  2. 以下のコマンドでパスワードをリセット
passwd ユーザー名
  1. システムを再起動

6.2.2 物理アクセスできない場合(クラウドVPSなど)

  • VPSのコンソール機能を利用してリモート接続
  • SSHの公開鍵認証を利用する

6.3 WindowsでSSHを使う方法は?

6.3.1 PowerShellを使用する

Windows 10以降では、PowerShellにSSHクライアントが標準搭載されています。以下のコマンドで接続できます。

ssh ユーザー名@サーバーのIPアドレス

6.3.2 PuTTYを使用する

  1. PuTTY をダウンロード・インストール
  2. Host Name (or IP address) にサーバーのIPアドレスを入力
  3. Connection typeSSH に設定し、Open をクリック
  4. ユーザー名とパスワードを入力して接続

6.4 Ubuntu WSL(Windows Subsystem for Linux)でSSHを設定するには?

WSL環境でSSHサーバーをセットアップする場合、以下の手順を実行します。

6.4.1 SSHサーバーのインストール

sudo apt update && sudo apt install openssh-server

6.4.2 SSHの設定変更

/etc/ssh/sshd_config を編集し、以下の設定を有効にします。

PasswordAuthentication yes

WSLはデフォルトで systemd を使用しないため、次のコマンドでSSHを手動起動します。

sudo service ssh start

6.5 SSH設定後にやるべき追加のセキュリティ対策は?

6.5.1 Fail2Banの導入

SSHへの不正アクセスを防ぐために、Fail2Banをインストールします。

sudo apt install fail2ban -y

設定ファイル /etc/fail2ban/jail.local を編集し、SSHの保護を有効にします。

[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600

Fail2Banを再起動して設定を適用します。

sudo systemctl restart fail2ban

6.5.2 SSHポートの変更

/etc/ssh/sshd_config を開き、デフォルトの 22 から変更します。

Port 2200

設定後、SSHを再起動し、UFWで新しいポートを許可します。

sudo ufw allow 2200/tcp

6.6 UbuntuでSSHのログをリアルタイムで確認するには?

SSHのログをリアルタイムで監視するには、次のコマンドを実行します。

sudo journalctl -u ssh -f

過去のSSHログを確認する場合は、次のコマンドを使用します。

sudo cat /var/log/auth.log | grep ssh

6.7 SSHをもっと便利に使うには?

6.7.1 .ssh/config で簡単ログイン

頻繁にSSH接続する場合、設定を ~/.ssh/config に保存すると、簡単にログインできます。

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

この設定後、以下のコマンドだけでSSH接続が可能になります。

ssh myserver

6.7.2 ssh-agent を利用する

秘密鍵のパスフレーズを省略するために、ssh-agent を使用します。

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

まとめ

本セクションでは、SSHのよくある質問とその解決策を紹介しました。

  • SSHのタイムアウト対策
  • パスワードを忘れた場合のリカバリー方法
  • WindowsおよびWSLでのSSH利用
  • 追加のセキュリティ対策
  • SSHログの確認方法
  • より便利に使うための .ssh/config の活用

本記事の内容を活用することで、安全で快適なSSH環境を構築し、リモートサーバー管理をスムーズに行うことができます。

関連記事

関連記事

1. はじめに UbuntuでSSHを利用することで、リモートからサーバーやPCに安全にアクセスし、操作できるようになります。本記事では、SSHの概要から、UbuntuへのSSHサーバーの導入、セキュリティ対策、トラブルシューティングまで[…]

侍エンジニア塾