- 1 1. はじめに
- 2 2. SSHの基本設定
- 3 まとめ
- 4 3. SSHのセキュリティ強化
- 5 まとめ
- 6 4. SSHの高度な設定
- 7 まとめ
- 8 5. SSHのトラブルシューティング
- 9 まとめ
- 10 6. FAQ(よくある質問)
- 11 まとめ
- 12 関連記事
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を使用する場合
- 公式サイト からPuTTYをダウンロード・インストール
- PuTTYを開き、
Host Name (or IP address)
にサーバーのIPアドレスを入力 Connection type
をSSH
に設定し、Open
をクリック- ユーザー名とパスワードを入力
まとめ
本セクションでは、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 設定手順
- SSHの設定ファイル
/etc/ssh/sshd_config
を編集します。
sudo nano /etc/ssh/sshd_config
- 以下の行を探し、
PermitRootLogin no
に変更します。
PermitRootLogin no
- ファイルを保存して、SSHサービスを再起動します。
sudo systemctl restart ssh
- 変更が適用されたかを確認するには、以下のコマンドを実行します。
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 設定手順
- SSHの設定ファイル
/etc/ssh/sshd_config
を開きます。
sudo nano /etc/ssh/sshd_config
- 許可するユーザーを指定します。
AllowUsers ユーザー名1 ユーザー名2
- 設定を適用するため、SSHを再起動します。
sudo systemctl restart ssh
3.4 SSHポートの変更
SSHのデフォルトポート (22
) は攻撃者に狙われやすいため、ポート番号を変更することでセキュリティを向上させることができます。
3.4.1 設定手順
- SSH設定ファイルを開きます。
sudo nano /etc/ssh/sshd_config
Port 22
の行を探し、例えばPort 2200
のように変更します。
Port 2200
- 設定を保存し、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 設定手順
/etc/ssh/sshd_config
を編集
sudo nano /etc/ssh/sshd_config
- 以下の行を追加
Port 22
Port 2200
- SSHを再起動
sudo systemctl restart ssh
- 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 物理的にサーバーへアクセスできる場合
- シングルユーザーモードで起動(GRUBメニューで
recovery mode
を選択) - 以下のコマンドでパスワードをリセット
passwd ユーザー名
- システムを再起動
6.2.2 物理アクセスできない場合(クラウドVPSなど)
- VPSのコンソール機能を利用してリモート接続
- SSHの公開鍵認証を利用する
6.3 WindowsでSSHを使う方法は?
6.3.1 PowerShellを使用する
Windows 10以降では、PowerShellにSSHクライアントが標準搭載されています。以下のコマンドで接続できます。
ssh ユーザー名@サーバーのIPアドレス
6.3.2 PuTTYを使用する
- PuTTY をダウンロード・インストール
Host Name (or IP address)
にサーバーのIPアドレスを入力Connection type
をSSH
に設定し、Open
をクリック- ユーザー名とパスワードを入力して接続
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サーバーの導入、セキュリティ対策、トラブルシューティングまで[…]