SSHサーバーとは?Linuxにリモート接続するための完全ガイド

プログラミング・IT

「Linuxサーバーを遠隔操作したい」「自宅のPCに外出先からアクセスしたい」と思ったことはありませんか?

そんな時に必要なのがSSHサーバーです。

SSHを使えば、インターネット経由で安全にサーバーに接続し、コマンドを実行したり、ファイルを転送したりできます。

今回は、SSHサーバーの基本からインストール方法、セキュリティ設定まで、初心者の方にも分かりやすく解説していきますね。


スポンサーリンク
  1. SSHとは何か?
    1. 安全なリモート接続プロトコル
    2. なぜ「Secure(安全)」なのか?
    3. SSHサーバーとSSHクライアント
  2. なぜSSHサーバーが必要なのか?
    1. サーバー管理の必須ツール
    2. セキュアなファイル転送
    3. 開発環境としても
    4. ホームサーバーへのアクセス
  3. SSHサーバーのインストール
    1. インストール済みか確認
    2. Ubuntu/Debianへのインストール
    3. CentOS/RHEL/AlmaLinuxへのインストール
    4. Fedoraへのインストール
    5. Arch Linuxへのインストール
  4. 基本的な接続方法
    1. ローカルネットワークからの接続
    2. ポートを指定して接続
    3. 接続の終了
  5. 設定ファイルの編集
    1. sshd_configの場所
  6. 基本的なセキュリティ設定
    1. ポート番号の変更
    2. rootログインの無効化
    3. パスワード認証の無効化(鍵認証のみ)
    4. 接続できるユーザーを制限
    5. アイドルタイムアウトの設定
    6. X11転送の無効化
    7. バナーメッセージの設定
  7. 公開鍵認証の設定
    1. パスワードより安全な認証方法
    2. クライアント側で鍵ペアを生成
    3. 公開鍵をサーバーに転送
    4. 鍵認証でログイン
    5. パスワード認証を無効化
  8. ログの確認
    1. SSHログの場所
    2. ログの例
    3. 不正アクセスのブロック
  9. トラブルシューティング
    1. 接続できない
    2. Permission denied (publickey)
    3. Connection refused
    4. Too many authentication failures
    5. 設定変更後に接続できなくなった
  10. SSH設定ファイル(クライアント側)
    1. ~/.ssh/config
  11. よくある質問
    1. SSHとTelnetの違いは?
    2. Windows からSSH接続できる?
    3. SSHでファイル転送できる?
    4. 外部(インターネット)から接続したい
    5. 複数の鍵を使い分けられる?
  12. まとめ:安全なSSH環境を構築しよう

SSHとは何か?

安全なリモート接続プロトコル

SSH(Secure Shell)は、ネットワーク経由でコンピューターに安全に接続するためのプロトコル(通信規約)です。

1995年に開発され、現在ではLinuxサーバー管理の標準的な方法として使われています。

具体的にできること:

  • 遠隔地からコマンドを実行
  • ファイルの送受信
  • トンネリング(安全な経路の確立)
  • X11転送(グラフィカルアプリの実行)

なぜ「Secure(安全)」なのか?

SSH以前はTelnetというプロトコルが使われていました。

Telnetの問題点:

  • パスワードが平文(暗号化なし)で送信される
  • 通信内容が盗聴される危険性
  • なりすましが容易

SSHの特徴:

  • すべての通信が暗号化される
  • パスワードも暗号化される
  • 公開鍵認証で強固なセキュリティ
  • 中間者攻撃への対策

安全性が格段に向上したんです。

SSHサーバーとSSHクライアント

SSHは、サーバーとクライアントの2つの要素で構成されます。

SSHサーバー:

  • 接続を待ち受ける側
  • Linuxではopenssh-server
  • 通常はポート22で待機

SSHクライアント:

  • 接続する側
  • Windows、Mac、Linuxすべてに存在
  • sshコマンドで接続

今回の記事では、主にSSHサーバーの設定について解説します。


なぜSSHサーバーが必要なのか?

サーバー管理の必須ツール

データセンターやクラウド上のサーバーには、物理的にアクセスできません。

SSHがあれば:

  • どこからでもサーバーを管理できる
  • モニターやキーボードが不要
  • 複数のサーバーを効率的に管理
  • スクリプトで自動化も可能

セキュアなファイル転送

SCP(Secure Copy)SFTP(SSH File Transfer Protocol)を使えば、安全にファイルを送受信できます。

例:

# ローカルからリモートへ
scp file.txt user@server:/path/

# リモートからローカルへ
scp user@server:/path/file.txt .

FTPのような古いプロトコルより安全です。

開発環境としても

リモートのLinux環境で開発作業を行う際にも便利です。

活用例:

  • Visual Studio CodeのRemote SSH拡張機能
  • PyCharmのリモートインタープリター
  • ターミナルから直接開発

ローカルPCがWindowsやMacでも、Linuxで開発できます。

ホームサーバーへのアクセス

自宅に設置したサーバーに、外出先からアクセスすることもできます。

用途:

  • 自宅のファイルにアクセス
  • 録画サーバーの操作
  • IoTデバイスの管理
  • 個人プロジェクトの管理

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

インストール済みか確認

多くのLinuxディストリビューションでは、SSHクライアントは標準装備されていますが、サーバーは別途インストールが必要です。

確認方法:

systemctl status ssh

または:

systemctl status sshd

サービスが動作していれば:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
     Active: active (running) since...

Ubuntu/Debianへのインストール

インストールコマンド:

sudo apt update
sudo apt install openssh-server

自動起動の設定:

sudo systemctl enable ssh

起動:

sudo systemctl start ssh

状態確認:

sudo systemctl status ssh

CentOS/RHEL/AlmaLinuxへのインストール

インストールコマンド:

sudo yum install openssh-server

または(CentOS 8以降):

sudo dnf install openssh-server

自動起動の設定と起動:

sudo systemctl enable sshd
sudo systemctl start sshd

状態確認:

sudo systemctl status sshd

ファイアウォールの設定:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

Fedoraへのインストール

通常、Fedoraには最初からインストールされています。

確認:

sudo systemctl status sshd

インストールが必要な場合:

sudo dnf install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd

Arch Linuxへのインストール

インストールコマンド:

sudo pacman -S openssh

自動起動と起動:

sudo systemctl enable sshd
sudo systemctl start sshd

基本的な接続方法

ローカルネットワークからの接続

まずは同じネットワーク内から接続してみましょう。

サーバーのIPアドレスを確認:

ip addr show

または:

hostname -I

別のコンピューターから接続:

ssh ユーザー名@IPアドレス

例:

ssh john@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:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

yesと入力してEnter。

パスワード入力:

john@192.168.1.100's password:

サーバー側のユーザーパスワードを入力します。

接続成功:

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-56-generic x86_64)
...
john@server:~$

プロンプトが変わり、リモートサーバーにログインした状態になります。

ポートを指定して接続

デフォルトはポート22ですが、変更している場合は明示的に指定します。

ssh -p 2222 user@192.168.1.100

接続の終了

exit

または Ctrl + D


設定ファイルの編集

sshd_configの場所

SSHサーバーの設定は、/etc/ssh/sshd_configファイルに記述されています。

編集:

sudo nano /etc/ssh/sshd_config

または:

sudo vim /etc/ssh/sshd_config

重要:
設定を変更したら、必ずSSHサービスを再起動する必要があります。

sudo systemctl restart ssh

または:

sudo systemctl restart sshd

基本的なセキュリティ設定

ポート番号の変更

デフォルトのポート22は、自動攻撃の標的になりやすいです。

設定ファイルを編集:

sudo nano /etc/ssh/sshd_config

変更:

# デフォルト
Port 22

# 変更後(例:2222)
Port 2222

保存して再起動:

sudo systemctl restart sshd

UFWを使用している場合:

sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp

接続時:

ssh -p 2222 user@server

rootログインの無効化

root(管理者)でのSSH接続を禁止すると、セキュリティが向上します。

設定:

PermitRootLogin no

推奨:
通常のユーザーでログインしてからsudoを使う方が安全です。

パスワード認証の無効化(鍵認証のみ)

より強固なセキュリティのため、パスワード認証を無効にできます。

注意:
鍵認証を設定してから行ってください!

PasswordAuthentication no

これについては後述します。

接続できるユーザーを制限

特定のユーザーだけSSH接続を許可できます。

特定ユーザーのみ許可:

AllowUsers john admin

特定ユーザーを拒否:

DenyUsers guest test

グループで指定:

AllowGroups sshusers

アイドルタイムアウトの設定

一定時間操作がない場合、自動的に切断します。

ClientAliveInterval 300
ClientAliveCountMax 2

この例では、300秒(5分)×2回 = 10分で切断されます。

X11転送の無効化

グラフィカルアプリの転送が不要なら無効にします。

X11Forwarding no

バナーメッセージの設定

ログイン前に警告メッセージを表示できます。

バナーファイルを作成:

sudo nano /etc/ssh/banner.txt

内容例:

*******************************************
*  Authorized access only!               *
*  All activity will be monitored.       *
*******************************************

sshd_configに追加:

Banner /etc/ssh/banner.txt

公開鍵認証の設定

パスワードより安全な認証方法

公開鍵認証は、パスワードを使わずに認証する方法です。

仕組み:

  1. クライアント側で鍵ペア(公開鍵と秘密鍵)を生成
  2. 公開鍵をサーバーに登録
  3. 秘密鍵を持つクライアントだけが接続できる

パスワードより遥かに安全で、総当たり攻撃も無効です。

クライアント側で鍵ペアを生成

接続元のコンピューター(クライアント)で実行:

ssh-keygen -t ed25519 -C "your_email@example.com"

対話形式で質問されます:

Enter file in which to save the key (/home/user/.ssh/id_ed25519):

そのままEnter(デフォルトの場所に保存)

Enter passphrase (empty for no passphrase):

パスフレーズを入力(オプション、推奨)

Enter same passphrase again:

もう一度入力

生成完了:

Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub

2つのファイルが作成されます:

  • id_ed25519:秘密鍵(絶対に他人に見せない)
  • id_ed25519.pub:公開鍵(サーバーに登録する)

公開鍵をサーバーに転送

自動転送(推奨):

ssh-copy-id user@server

パスワードを入力すると、自動的に公開鍵がサーバーに登録されます。

手動転送:

公開鍵の内容を確認:

cat ~/.ssh/id_ed25519.pub

サーバーにSSHで接続し、以下を実行:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

公開鍵の内容を貼り付けて保存。

chmod 600 ~/.ssh/authorized_keys

鍵認証でログイン

ssh user@server

パスワードを聞かれず(またはパスフレーズのみで)ログインできます。

パスワード認証を無効化

鍵認証が動作することを確認してから、パスワード認証を無効にします。

重要:
新しいSSH接続を残したまま、設定を変更してください。
設定ミスで締め出されないためです。

sshd_configを編集:

PasswordAuthentication no
ChallengeResponseAuthentication no

再起動:

sudo systemctl restart sshd

別の端末から接続テスト:
鍵なしでは接続できないことを確認します。


ログの確認

SSHログの場所

SSHサーバーのログは、システムログに記録されます。

Ubuntu/Debian:

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

CentOS/RHEL:

sudo tail -f /var/log/secure

systemdベースのシステム:

sudo journalctl -u ssh -f

または:

sudo journalctl -u sshd -f

ログの例

成功したログイン:

Jan 20 10:15:23 server sshd[12345]: Accepted publickey for john from 192.168.1.50 port 54321 ssh2: ED25519 SHA256:xxxxx

失敗したログイン:

Jan 20 10:16:45 server sshd[12346]: Failed password for invalid user admin from 203.0.113.50 port 12345 ssh2

不正アクセスの試行:
短時間に多数の失敗ログがあれば、総当たり攻撃の可能性があります。

不正アクセスのブロック

Fail2Ban のインストール:

# Ubuntu/Debian
sudo apt install fail2ban

# CentOS/RHEL
sudo yum install fail2ban

起動と有効化:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Fail2Banは、複数回ログインに失敗したIPアドレスを自動的にブロックしてくれます。


トラブルシューティング

接続できない

1. SSHサーバーが動作しているか確認:

sudo systemctl status sshd

2. ファイアウォールを確認:

sudo ufw status

ポート22(または変更後のポート)が開いているか確認。

3. ネットワーク到達性を確認:

ping サーバーIP

4. ポート番号を確認:
デフォルトの22以外に変更していないか確認。

Permission denied (publickey)

鍵認証でこのエラーが出る場合:

1. 秘密鍵のパスを確認:

ssh -i ~/.ssh/id_ed25519 user@server

2. 公開鍵がサーバーに登録されているか確認:

cat ~/.ssh/authorized_keys

3. パーミッションを確認:

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

4. SELinux(CentOS/RHEL):

restorecon -Rv ~/.ssh

Connection refused

原因:

  • SSHサーバーが起動していない
  • ポート番号が違う
  • ファイアウォールでブロックされている

確認:

sudo systemctl status sshd
sudo ss -tlnp | grep ssh

Too many authentication failures

多数の鍵を試した結果、接続拒否されることがあります。

対処法:
特定の鍵を指定:

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@server

設定変更後に接続できなくなった

重要:
設定変更時は、既存のSSH接続を維持したまま、別のターミナルでテストしてください。

復旧方法(物理アクセスまたはコンソール経由):

# 設定ファイルを編集
sudo nano /etc/ssh/sshd_config

# 構文チェック
sudo sshd -t

# エラーがなければ再起動
sudo systemctl restart sshd

SSH設定ファイル(クライアント側)

~/.ssh/config

クライアント側で設定ファイルを作成すると、接続が便利になります。

作成:

nano ~/.ssh/config

内容例:

Host myserver
    HostName 192.168.1.100
    User john
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host webserver
    HostName example.com
    User admin
    Port 22
    IdentityFile ~/.ssh/web_key

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

使用:

# 以下のコマンドだけでOK
ssh myserver

# 通常は以下が必要
ssh -p 2222 -i ~/.ssh/id_ed25519 john@192.168.1.100

設定が大幅に簡略化されます。


よくある質問

SSHとTelnetの違いは?

SSH:

  • 暗号化される(安全)
  • 現代の標準
  • ポート22

Telnet:

  • 暗号化されない(危険)
  • 古いプロトコル
  • ポート23

結論:
Telnetは使わないでください。すべての環境でSSHを使いましょう。

Windows からSSH接続できる?

はい、できます。

Windows 10/11:
標準でsshコマンドが使えます。

PowerShellまたはコマンドプロンプトで:

ssh user@server

古いWindowsやGUIツール:

  • PuTTY:無料のSSHクライアント
  • MobaXterm:多機能ターミナル
  • Windows Subsystem for Linux(WSL)

SSHでファイル転送できる?

はい、複数の方法があります。

SCP(Secure Copy):

# ローカル → リモート
scp file.txt user@server:/path/

# リモート → ローカル
scp user@server:/path/file.txt .

# ディレクトリごと
scp -r folder/ user@server:/path/

SFTP(SSH File Transfer Protocol):

sftp user@server

対話形式でファイル操作ができます。

rsync over SSH:

rsync -avz -e ssh folder/ user@server:/path/

差分同期が可能で効率的です。

外部(インターネット)から接続したい

必要な設定:

1. ルーターのポートフォワーディング:

  • 外部ポート(例:2222)→ 内部サーバーのポート22
  • ルーター管理画面で設定

2. グローバルIPアドレスの確認:

curl ifconfig.me

3. 動的DNSの利用(IP変動の場合):

  • No-IP
  • DuckDNS
    などのサービス

4. セキュリティ対策:

  • 鍵認証のみ許可
  • Fail2Banの導入
  • デフォルトポートの変更
  • UFWで接続元を制限

複数の鍵を使い分けられる?

はい、用途ごとに鍵を作成できます。

例:

# 仕事用
ssh-keygen -t ed25519 -f ~/.ssh/id_work

# 個人用
ssh-keygen -t ed25519 -f ~/.ssh/id_personal

~/.ssh/config で指定:

Host work-server
    IdentityFile ~/.ssh/id_work

Host personal-server
    IdentityFile ~/.ssh/id_personal

まとめ:安全なSSH環境を構築しよう

SSHサーバーは、Linuxのリモート管理に欠かせないツールです。

適切に設定すれば、安全で便利な環境を構築できます。

この記事のポイント:

  • SSHは暗号化された安全なリモート接続プロトコル
  • openssh-serverをインストールして設定
  • デフォルトポート22は変更推奨
  • rootログインは無効化する
  • 公開鍵認証でセキュリティ強化
  • パスワード認証は無効化を検討
  • ログ監視で不正アクセスを検出
  • Fail2Banで自動ブロック
  • ~/.ssh/configで接続を簡略化
  • 設定変更時は慎重に(締め出しに注意)

最初のステップ:

# 1. インストール
sudo apt install openssh-server

# 2. 起動
sudo systemctl start ssh

# 3. 接続テスト
ssh localhost

# 4. セキュリティ設定
sudo nano /etc/ssh/sshd_config
# Port 2222
# PermitRootLogin no

# 5. 再起動
sudo systemctl restart ssh

セキュリティを最優先に、快適なリモート管理環境を構築しましょう!

何か問題が発生したら、既存の接続を維持したまま慎重に対処してくださいね。

コメント

タイトルとURLをコピーしました