「Linuxサーバーを遠隔操作したい」「自宅のPCに外出先からアクセスしたい」と思ったことはありませんか?
そんな時に必要なのがSSHサーバーです。
SSHを使えば、インターネット経由で安全にサーバーに接続し、コマンドを実行したり、ファイルを転送したりできます。
今回は、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
公開鍵認証の設定
パスワードより安全な認証方法
公開鍵認証は、パスワードを使わずに認証する方法です。
仕組み:
- クライアント側で鍵ペア(公開鍵と秘密鍵)を生成
- 公開鍵をサーバーに登録
- 秘密鍵を持つクライアントだけが接続できる
パスワードより遥かに安全で、総当たり攻撃も無効です。
クライアント側で鍵ペアを生成
接続元のコンピューター(クライアント)で実行:
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
セキュリティを最優先に、快適なリモート管理環境を構築しましょう!
何か問題が発生したら、既存の接続を維持したまま慎重に対処してくださいね。


コメント