UbuntuでSSHを活用!接続・ポート変更・公開鍵認証の設定ガイド

目次

1. はじめに

UbuntuでSSHを利用することで、リモートからサーバーやPCに安全にアクセスし、操作できるようになります。本記事では、SSHの概要から、UbuntuへのSSHサーバーの導入、セキュリティ対策、トラブルシューティングまで、初心者でも理解できるように詳しく解説します。

SSHとは?

SSH(Secure Shell)は、ネットワークを介して安全にリモートコンピュータへ接続するためのプロトコルです。従来のTelnetやFTPとは異なり、データが暗号化されるため、盗聴や改ざんのリスクを大幅に低減できます。

UbuntuにおけるSSHの主な用途

UbuntuでSSHを使用する主な場面には、以下のようなものがあります。

  • リモートサーバー管理: Ubuntuサーバーを遠隔地から操作
  • ファイル転送: SCPやSFTPを用いた安全なファイルのやり取り
  • ポートフォワーディング: セキュリティを強化したリモート接続

本記事で学べること

  • SSHの基本概念と仕組み
  • UbuntuでのSSHサーバーの導入方法
  • SSH接続の設定とトラブルシューティング
  • SSHのセキュリティ対策

2. SSHの基本概念

SSHを効果的に活用するためには、その基本概念を理解することが重要です。本章では、SSHの仕組みや、認証方式の違いについて説明します。

SSHの仕組み

SSHは、クライアントとサーバーの間で安全な接続を確立するプロトコルです。デフォルトでは、TCPの22番ポートを使用し、暗号化された通信を行います。

主な機能

  • リモートログイン: サーバーに対してコマンドを実行
  • ファイル転送: SCPやSFTPによる安全なデータ送信
  • ポートフォワーディング: SSHを介して他のサービスに接続

SSHの認証方式

SSHには主に以下の2つの認証方式があります。

パスワード認証

  • ユーザー名とパスワードを入力してログイン
  • 簡単だが、ブルートフォース攻撃のリスクがある

公開鍵認証

  • 公開鍵と秘密鍵を用いた認証方式
  • セキュリティが高く、推奨される認証方法

SSHの利点

  • データの暗号化: 通信内容が保護される
  • リモート管理が容易: どこからでもアクセス可能
  • セキュリティの向上: 不正アクセスを防ぎやすい
年収訴求

3. UbuntuへのSSHサーバーのインストール

UbuntuでSSHを利用するためには、OpenSSHサーバーをインストールする必要があります。ここでは、インストール手順と基本設定について説明します。

OpenSSHサーバーのインストール

Ubuntuでは、以下のコマンドでOpenSSHサーバーをインストールできます。

sudo apt update
sudo apt install openssh-server

インストールが完了したら、SSHサービスが起動しているか確認しましょう。

sudo systemctl status ssh

SSHサービスの起動とステータス確認

SSHサービスを手動で起動・停止するには、次のコマンドを使用します。

# SSHを起動
sudo systemctl start ssh

# SSHを有効化(再起動後も自動起動)
sudo systemctl enable ssh

# SSHを停止
sudo systemctl stop ssh

UFW(Uncomplicated Firewall)の設定

デフォルトでは、UFWが有効になっている場合、SSHの接続がブロックされる可能性があります。以下のコマンドでSSHポート(22番)を許可しましょう。

sudo ufw allow ssh
sudo ufw enable

4. SSH接続の設定

SSHを安全に利用するためには、適切な設定を行う必要があります。本章では、公開鍵認証の設定方法を説明します。

鍵ペアの生成

クライアント側で以下のコマンドを実行し、公開鍵と秘密鍵のペアを作成します。

ssh-keygen -t rsa -b 4096

デフォルトでは、~/.ssh/id_rsa に秘密鍵、~/.ssh/id_rsa.pub に公開鍵が保存されます。

公開鍵のサーバーへの配置

作成した公開鍵を、SSHサーバーに転送します。

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

または、手動でコピーする場合:

scp ~/.ssh/id_rsa.pub ユーザー名@サーバーのIPアドレス:~/

サーバー側で以下のコマンドを実行し、公開鍵を適切なディレクトリに配置します。

mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub

sshd_configの編集

SSHの設定ファイルを開き、セキュリティを向上させましょう。

sudo nano /etc/ssh/sshd_config

以下の項目を確認・編集します。

# パスワード認証を無効化(公開鍵認証のみ)
PasswordAuthentication no

# Rootログインの禁止
PermitRootLogin no

# 使用するポートの変更(例: 2222)
Port 2222

設定を変更したら、SSHサービスを再起動します。

sudo systemctl restart ssh

5. SSH接続の実行

UbuntuでSSHサーバーを設定した後は、実際にクライアントから接続を行う必要があります。本章では、基本的なSSH接続方法と、ポート変更時の接続方法について説明します。

基本的なSSH接続コマンド

SSHクライアントからサーバーに接続するには、以下のコマンドを使用します。

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

例として、サーバーのIPアドレスが 192.168.1.10 で、ユーザー名が ubuntu の場合、以下のように入力します。

ssh ubuntu@192.168.1.10

初回接続時は、サーバーのフィンガープリントが表示されるため、「yes」と入力して接続を承認してください。

ポート番号を変更した場合の接続

デフォルトの22番ポートではなく、例えば「2222」に変更した場合は、以下のように -p オプションを付けて指定します。

ssh -p 2222 ubuntu@192.168.1.10

秘密鍵を指定して接続

公開鍵認証を設定した場合、以下のように -i オプションを使用して秘密鍵を指定できます。

ssh -i ~/.ssh/id_rsa ubuntu@192.168.1.10

SSH経由でリモートコマンドを実行

リモートサーバーにログインせずに、直接コマンドを実行することも可能です。

ssh ubuntu@192.168.1.10 "ls -lah /home/ubuntu"

この方法を利用すれば、スクリプトの自動化やリモート操作を効率的に行えます。

SCPを使ったファイル転送

SSHを利用して、ローカルPCとリモートサーバー間でファイルを転送できます。

ローカル → リモート

scp ファイル名 ユーザー名@サーバーのIPアドレス:リモートのディレクトリ

例:

scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/

リモート → ローカル

scp ユーザー名@サーバーのIPアドレス:リモートのファイル名 ローカルのディレクトリ

例:

scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./

SFTPを使ったファイル管理

SFTPを利用してファイルを管理することもできます。

sftp ubuntu@192.168.1.10

接続後、以下のようなコマンドを使用できます。

ls        # ファイル一覧
cd        # ディレクトリ移動
put ファイル名   # ローカルからリモートへアップロード
get ファイル名   # リモートからローカルへダウンロード
exit      # 接続終了

6. SSH接続のトラブルシューティング

SSH接続時に問題が発生することは珍しくありません。ここでは、よくあるトラブルとその解決方法を解説します。

SSH接続エラーの一般的な原因と対処法

SSH接続がうまくいかない場合、以下のような原因が考えられます。

1. SSHサーバーが起動していない

SSHサーバーが正常に動作しているかを確認しましょう。

sudo systemctl status ssh

解決策:

  • SSHサーバーが停止している場合、以下のコマンドで起動します。
  sudo systemctl start ssh
  • サーバーを再起動しても自動でSSHが起動するようにするには、以下のコマンドを実行します。
  sudo systemctl enable ssh

2. ファイアウォール(UFW)がSSH接続をブロックしている

UFW(Uncomplicated Firewall)が有効になっている場合、SSHがブロックされている可能性があります。

解決策:

  • 現在のUFW設定を確認する。
  sudo ufw status
  • SSHを許可する。
  sudo ufw allow ssh

(ポートを変更している場合は sudo ufw allow <ポート番号> を実行)

  • UFWを再起動する。
  sudo ufw reload

3. ポート番号が変更されている

デフォルトの 22 番ポートではなく、カスタムポートを使用している場合、接続時に適切なポートを指定する必要があります。

解決策:

  • サーバー側で使用しているポートを確認する。
  sudo grep Port /etc/ssh/sshd_config
  • クライアント側で適切なポートを指定して接続する。
  ssh -p 2222 ユーザー名@サーバーのIPアドレス

4. SSHキーのパーミッションが正しくない

公開鍵認証を使用している場合、鍵ファイルのパーミッションが適切でないと接続できません。

解決策:

  • 秘密鍵のパーミッションを適切に設定する。
  chmod 600 ~/.ssh/id_rsa
  • 公開鍵のパーミッションを適切に設定する。
  chmod 644 ~/.ssh/authorized_keys

5. ホストキーの不一致

サーバーのSSHホストキーが変更された場合、クライアント側で「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」というエラーが発生することがあります。

解決策:

  • 古いホストキーを削除する。
  ssh-keygen -R <サーバーのIPアドレス>
  • 再度SSH接続を試みる。
  ssh ユーザー名@サーバーのIPアドレス

6. SSHログの確認

SSHの詳細なエラーメッセージを確認するには、サーバー側のログをチェックします。

sudo journalctl -u ssh --no-pager | tail -n 20

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

sudo tail -f /var/log/auth.log

7. 接続がタイムアウトする場合

SSH接続が遅い、または途中で切断される場合は、以下の点を確認してください。

解決策:

  • KeepAliveを有効にする
    クライアントの ~/.ssh/config に以下を追加。
  Host *
      ServerAliveInterval 60
  • サーバー側でタイムアウト設定を調整
    /etc/ssh/sshd_config に以下を追加し、SSHサービスを再起動。
  ClientAliveInterval 60
  ClientAliveCountMax 3
  sudo systemctl restart ssh

まとめ

SSH接続の問題はさまざまな原因で発生しますが、多くの場合は以下のチェックポイントで解決できます。

SSHサービスが起動しているか確認
ファイアウォールがブロックしていないかチェック
ポート設定が正しいか確認
SSHキーのパーミッションが適切か調べる
エラーメッセージをログで確認

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

SSHは強力なリモートアクセスツールですが、適切なセキュリティ対策を施さないと、不正アクセスやブルートフォース攻撃の標的となる可能性があります。本章では、SSHの安全性を高めるための推奨設定を解説します。

1. パスワード認証の無効化と公開鍵認証の推奨

デフォルトでは、SSHはパスワード認証を許可していますが、これはブルートフォース攻撃のリスクを高めます。SSHの公開鍵認証を有効にし、パスワード認証を無効化することでセキュリティを強化できます。

手順

  1. sshd_config を編集する
   sudo nano /etc/ssh/sshd_config
  1. 以下の設定を変更する(または追加する)
   PasswordAuthentication no
   PubkeyAuthentication yes
  1. SSHサービスを再起動する
   sudo systemctl restart ssh

この設定により、SSHは公開鍵認証のみを受け付けるようになります。事前に公開鍵の設定を完了させてから適用してください。

2. SSHのポート番号を変更する

SSHのデフォルトポート(22番)をそのまま使用すると、攻撃者に狙われやすくなります。セキュリティを向上させるために、ポート番号を変更することを推奨します。

手順

  1. sshd_config を開く
   sudo nano /etc/ssh/sshd_config
  1. 以下のように変更する(例: 2222に変更)
   Port 2222
  1. 新しいポートをファイアウォールで許可
   sudo ufw allow 2222/tcp
  1. SSHサービスを再起動
   sudo systemctl restart ssh
  1. 新しいポートで接続テスト
   ssh -p 2222 ユーザー名@サーバーのIPアドレス

3. RootユーザーのSSHログインを禁止する

デフォルトで、rootユーザーはSSHログインが可能ですが、これはセキュリティリスクになります。一般ユーザーのみSSHアクセスを許可し、必要に応じて sudo を使用するのが推奨されます。

手順

  1. sshd_config を開く
   sudo nano /etc/ssh/sshd_config
  1. 以下の行を変更する
   PermitRootLogin no
  1. SSHサービスを再起動
   sudo systemctl restart ssh

4. Fail2Banを導入してブルートフォース攻撃を防ぐ

Fail2Banは、不正なログイン試行を検出し、一定回数以上の失敗があるとIPアドレスを自動でブロックするツールです。

インストールと設定

  1. Fail2Banをインストール
   sudo apt install fail2ban -y
  1. 設定ファイルをコピー
   sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. jail.local を編集
   sudo nano /etc/fail2ban/jail.local
  1. [sshd] の項目を変更
   [sshd]
   enabled = true
   maxretry = 5
   bantime = 600
   findtime = 600
  • maxretry: 許容されるログイン失敗回数
  • bantime: ブロックする時間(秒)
  • findtime: 失敗回数の判定期間(秒)
  1. Fail2Banを再起動
   sudo systemctl restart fail2ban
  1. 現在のFail2Banのステータスを確認
   sudo fail2ban-client status sshd

まとめ

SSHのセキュリティを強化するためには、以下の対策を実施しましょう。

パスワード認証を無効化し、公開鍵認証を使用
SSHのポート番号を変更し、攻撃リスクを軽減
Rootログインを禁止し、特定のユーザーのみアクセス許可
Fail2Banを導入し、ブルートフォース攻撃を防止

8. よくある質問(FAQ)

SSHを設定・運用する際に、よくある疑問や問題について詳しく解説します。

Q1: SSH接続時に「接続が拒否されました」と表示される原因は?

SSHサーバーへの接続が拒否される原因は複数考えられます。

主な原因と対策

  1. SSHサービスが起動していない
   sudo systemctl status ssh

対策: サービスが停止している場合は起動する。

   sudo systemctl start ssh
  1. ファイアウォール(UFW)がブロックしている
   sudo ufw allow ssh
   sudo ufw enable
  1. ポート番号の変更
    SSHのポート番号をデフォルト(22)以外に変更している場合、正しいポートを指定する。
   ssh -p 2222 ユーザー名@サーバーのIPアドレス

Q2: SSHのデフォルトポートを変更する方法は?

デフォルトの22番ポートは攻撃対象になりやすいため、変更するとセキュリティが向上します。

手順

  1. 設定ファイルを編集
   sudo nano /etc/ssh/sshd_config
  1. Port の値を変更(例: 2222)
   Port 2222
  1. 新しいポートをファイアウォールで許可
   sudo ufw allow 2222/tcp
  1. SSHサービスを再起動
   sudo systemctl restart ssh

変更後は、新しいポートで接続を試してください。

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

Q3: 公開鍵認証が機能しない場合のチェックポイントは?

SSH公開鍵認証が動作しない場合、以下を確認してください。

  1. 公開鍵が適切に配置されているか
   ls -l ~/.ssh/authorized_keys

authorized_keys が存在し、適切な鍵が含まれているかを確認。

  1. ファイルのパーミッションが適切か
   chmod 600 ~/.ssh/authorized_keys
   chmod 700 ~/.ssh
  1. SSHサーバー設定が公開鍵認証を許可しているか
   sudo nano /etc/ssh/sshd_config

以下の設定を確認:

   PubkeyAuthentication yes
   PasswordAuthentication no
  1. SSHサービスを再起動
   sudo systemctl restart ssh

Q4: 特定のIPアドレスからのみSSH接続を許可するには?

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

方法1: sshd_config の編集

  1. 設定ファイルを開く
   sudo nano /etc/ssh/sshd_config
  1. AllowUsers に許可するIPアドレスを追加
   AllowUsers ユーザー名@192.168.1.100
  1. SSHサービスを再起動
   sudo systemctl restart ssh

方法2: ファイアウォール(UFW)の設定

  1. SSH接続を許可するIPアドレスを指定
   sudo ufw allow from 192.168.1.100 to any port 22
  1. それ以外のSSH接続をブロック
   sudo ufw deny 22

Q5: SSH接続のタイムアウト時間を変更する方法は?

SSHセッションが一定時間で切断される場合、設定を変更することで対処できます。

クライアント側の設定

  1. ~/.ssh/config に以下を追加
   Host *
       ServerAliveInterval 60

サーバー側の設定

  1. sshd_config を編集
   sudo nano /etc/ssh/sshd_config
  1. 以下を追加・変更
   ClientAliveInterval 60
   ClientAliveCountMax 3
  1. SSHサービスを再起動
   sudo systemctl restart ssh

まとめ

本章では、SSHに関するよくある質問とその解決方法を紹介しました。問題が発生した際には、ログを確認しながら原因を特定することが重要です。

SSH接続が拒否された場合の対処法
デフォルトポートの変更と適切な接続方法
公開鍵認証が機能しない場合のチェックリスト
特定のIPアドレスのみSSH接続を許可する方法
SSHのタイムアウトを防ぐ設定

9. まとめ

本記事では、UbuntuでのSSHの設定と利用方法について、基本から応用まで詳しく解説しました。ここで、重要なポイントを振り返り、さらに学習を深めるためのリソースを紹介します。

本記事の要点まとめ

1. SSHの基本と仕組み

  • SSHは、安全にリモート接続を行うためのプロトコル。
  • データが暗号化されるため、TelnetやFTPよりも安全。
  • 認証方式には パスワード認証公開鍵認証 がある。

2. UbuntuでのSSHサーバーのインストール

  • OpenSSHを sudo apt install openssh-server でインストール。
  • systemctl status ssh でサービスの状態を確認。
  • UFW(ファイアウォール)で sudo ufw allow ssh を実行してアクセスを許可。

3. SSH接続の設定

  • ssh ユーザー名@サーバーのIPアドレス でリモート接続。
  • 公開鍵認証を使用すると、セキュリティが向上。
  • sshd_config の設定で、パスワード認証を無効化可能。

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

  • サービスが起動しているか確認 (systemctl status ssh)。
  • ポート番号の変更時は ssh -p 2222 ユーザー名@IP で接続。
  • ~/.ssh/authorized_keys のパーミッション設定を適切に調整。

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

  • パスワード認証を無効化 し、公開鍵認証を使用。
  • SSHポート番号を変更(例: 2222)。
  • Fail2Banを導入 し、ブルートフォース攻撃を防ぐ。
  • 特定のIPアドレスのみ許可 して、不正アクセスを制限。

6. FAQで解決した主な疑問

  • 「SSH接続が拒否される」 → サーバーの起動状況やUFWの設定を確認。
  • 「公開鍵認証が機能しない」 → 鍵のパーミッションや sshd_config をチェック。
  • 「SSHのタイムアウトを防ぐ」 → ClientAliveInterval の設定を変更。

さらなる学習のためのリソース

SSHの設定をさらに深く理解するために、以下のリソースを活用してください。

📚 公式ドキュメント

🛠 関連ツール

🎥 おすすめ動画

  • YouTubeで「Ubuntu SSH 設定」などで検索すると、初心者向けの解説動画が多数あります。

作成した動画を友だち、家族、世界中の人たちと共有…

次のステップ

本記事を読んでSSHの基本を理解したら、以下のような応用的なスキルを身につけるのがおすすめです。

Ansibleを使ったSSHの自動管理

  • サーバーが複数台ある場合、SSHを利用してAnsibleでリモート管理を自動化できます。

SSHトンネリングとポートフォワーディング

  • SSHを使って安全にリモートデスクトップ接続を確立したり、VPNのように使うことも可能です。

SSHログ監視とセキュリティ強化

  • fail2banlogwatch を活用し、不正アクセスをリアルタイムで監視する方法を学ぶ。

まとめ

本記事を最後までお読みいただき、ありがとうございました!🎉
UbuntuでSSHを適切に設定することで、リモート管理の効率とセキュリティを大幅に向上させることができます。

「SSHを使った便利な応用テクニック」や「サーバーセキュリティのさらなる強化」など、より深いトピックについても、今後の学習にぜひ役立ててください!

それでは、快適なSSHライフを!🖥️🔐

年収訴求