SSHの基本を理解しよう

SSHとは何か?
SSH(エスエスエイチ)とは「Secure Shell(セキュアシェル)」の略です。
インターネット上で暗号化された安全な通信路を作り、離れた場所にあるコンピュータを操作するための技術です。
1995年、フィンランドの研究者タトゥ・ユローネンが開発しました。きっかけは、大学のネットワークでパスワードが盗み見られる事件が起きたことでした。
電話に例えると分かりやすい
普通の電話では、誰かが盗聴器を仕掛ければ会話が聞こえてしまいます。
でもSSHは暗号化された専用回線のようなもの。あなたとリモートコンピュータだけが理解できる「秘密の言語」で会話しているようなものです。
なぜSSHが必要なのか
現代では、サーバー管理やリモートワークが当たり前になりました。
SSHはこんな問題を解決します:
- 盗聴防止:すべての通信が暗号化され、第三者には意味不明な文字列にしか見えない
- なりすまし防止:接続先が本物のサーバーか確認できる
- データ改ざん防止:通信内容が途中で書き換えられていないことを保証
- 強力な認証:パスワードより安全な「鍵」を使った認証が可能
基本用語を覚えよう
ポート22
SSHが使う標準的な「住所番号」です。
コンピュータには65,535個のポート(扉のようなもの)があり、SSHは伝統的に22番を使います。作者がTelnet(23番)とFTP(21番)の間を選んだためです。
プロトコル
コンピュータ同士が通信するための「ルール」のこと。
現在はSSH-2が標準で、2006年から使われています。古いSSH-1は安全じゃないので使いません。
暗号化の3つの種類
- 対称暗号化:実際のデータ通信で使用。同じ鍵で暗号化と復号化
- 非対称暗号化(公開鍵暗号):最初の接続と認証で使用。2つの鍵のペア
- ハッシュ:データが改ざんされていないことを確認
認証方式
- パスワード認証:従来の方法だが、総当たり攻撃に弱い
- 公開鍵認証:より安全。秘密鍵(あなただけが持つ)と公開鍵(サーバーに登録)のペアを使用
- 証明書ベース認証:企業向けの高度な方法
クライアント側:SSHで接続する方法

MacからのSSH接続
MacにはTerminal(ターミナル)というアプリが最初から入っています。
アプリケーションフォルダ → ユーティリティフォルダで見つけられます。
基本的な接続方法
# 基本の接続
ssh ユーザー名@ホスト名
# ポート番号を変える場合
ssh -p 2222 ユーザー名@ホスト名
# 特定の鍵ファイルを使う場合
ssh -i ~/.ssh/my_key ユーザー名@ホスト名
設定ファイルを作って楽をする
~/.ssh/config
というファイルを作ると便利です:
Host myserver
HostName 192.168.1.100
User john
Port 2222
IdentityFile ~/.ssh/myserver_key
これでssh myserver
だけで接続できるようになります。
SSH鍵を作る(Ed25519推奨)
ssh-keygen -t ed25519 -C "your_email@example.com"
WindowsからのSSH接続
Windows 10/11にはOpenSSHが標準搭載されています。
PowerShellやコマンドプロンプトから直接SSHコマンドが使えるんです。
PowerShellでの接続
# 基本の接続
ssh ユーザー名@ホスト名
# 鍵ファイルを指定
ssh -i $env:USERPROFILE\.ssh\id_ed25519 ユーザー名@ホスト名
便利なツール
Windows Terminalは複数のSSH接続をタブで管理できる優れもの。設定からプロファイルを作れば、ワンクリックで接続できます。
その他のツール:
- PuTTY(パティ):軽くて歴史あるツール(3MB未満)
- MobaXterm(モバエクスターム):多機能統合ターミナル
- TeraTerm(テラターム):日本製で使いやすい
**WSL(Windows Subsystem for Linux)**を使えば、完全なLinux環境でSSHが使えます。
LinuxからのSSH接続
Ubuntu/Debianでのインストール
sudo apt update
sudo apt install openssh-client
CentOS/RHEL/Fedoraでのインストール
sudo dnf install openssh-clients
GUIツール
- Remmina(レミーナ):最も人気のGUIクライアント
- Terminator(ターミネーター):高度な画面分割機能
サーバー側:SSHサーバーを作る
MacでSSHサーバーを有効化
システム設定から(macOS Ventura/Sonoma)
- Appleメニュー → システム設定
- 一般 → 共有
- 「リモートログイン」をオン
コマンドラインから
sudo systemsetup -setremotelogin on
WindowsでSSHサーバーを構築
Windows Server 2025では標準搭載されています。
Windows 10/11では:
- 設定 → システム → オプション機能
- 「OpenSSH Server」をインストール
- PowerShellで以下を実行:
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
ファイアウォール設定
自動的にルールが作成されますが、手動で設定する場合:
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" `
-DisplayName "OpenSSH Server" `
-Protocol TCP -Action Allow `
-Direction Inbound -LocalPort 22
LinuxでSSHサーバーを構築
Ubuntu/Debian
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
CentOS/RHEL/Fedora
sudo dnf install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
重要な設定ファイル
/etc/ssh/sshd_config
の主な設定:
Port 22 # ポート番号
PermitRootLogin no # rootログインを禁止
PasswordAuthentication no # パスワード認証を無効化(鍵認証のみ)
セキュリティ設定:安全に使うために

公開鍵認証を設定する
公開鍵認証は、パスワードよりはるかに安全です。
2025年の推奨はEd25519アルゴリズム:
# 鍵ペアを作る
ssh-keygen -t ed25519 -a 100 -C "user@domain-$(date +%Y%m%d)"
-a 100
オプションは、パスフレーズの暗号化を100回繰り返し、総当たり攻撃を困難にします。
authorized_keysの設定
サーバー側で公開鍵を登録する必要があります。
適切な権限設定が必須:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
セキュリティを高める設定
ポート番号を変更
標準の22番から変更することで、自動化された攻撃を減らせます:
# /etc/ssh/sshd_config
Port 2222
rootログインを無効化
セキュリティの基本として、rootでの直接ログインは必ず無効化:
PermitRootLogin no
fail2banで攻撃を防ぐ
fail2banは、ログイン試行の失敗を監視し、攻撃者を自動的にブロックします:
sudo apt install fail2ban
設定例(/etc/fail2ban/jail.local):
[sshd]
enabled = true
maxretry = 3 # 3回失敗したらブロック
bantime = 1h # 1時間ブロック
findtime = 10m # 10分以内の失敗をカウント
基本的な使い方
リモートサーバーにログイン
ssh user@server.com
リモートでコマンドを実行
# 1つのコマンドを実行
ssh user@server "ls -la /var/log"
# 複数のコマンドを実行
ssh user@server "cd /var/www && git pull"
ファイル転送(SCP)
SCPは「Secure Copy」の略で、SSHを使った安全なファイルコピーです。
# ローカル→リモートへ
scp file.txt user@server:/path/to/destination/
# リモート→ローカルへ
scp user@server:/path/to/file.txt ./
SFTP(対話的ファイル転送)
SFTPは「SSH File Transfer Protocol」の略です。
sftp user@server
sftp> put local_file.txt # アップロード
sftp> get remote_file.txt # ダウンロード
sftp> ls # ファイル一覧
rsyncで同期する
rsyncは効率的にファイルを同期できるツールです。
# 基本的な同期
rsync -avz source/ user@server:/destination/
# 進捗表示付き
rsync -avz --progress source/ user@server:/destination/
応用的な使い方

SSHトンネリング(ポートフォワーディング)
ローカルフォワード
リモートのサービスをローカルで使えるようにします:
# リモートのMySQLをローカルの3307番で使用
ssh -L 3307:localhost:3306 user@mysql_server
リモートフォワード
ローカルのサービスをリモートに公開します:
# ローカルの開発サーバーをリモートで公開
ssh -R 8080:localhost:3000 user@public_server
動的フォワード(SOCKSプロキシ)
ブラウザ用のプロキシを作成:
ssh -D 8080 user@proxy_server
多段SSH(踏み台サーバー経由)
セキュリティのため、直接アクセスできないサーバーに踏み台経由で接続します。
最新の方法はProxyJump:
# 踏み台経由で接続
ssh -J user@jump_host user@final_destination
~/.ssh/configでの設定:
Host internal-server
HostName 192.168.1.100
ProxyJump bastion-host
User admin
VS CodeやJetBrainsでリモート開発
VS Code Remote-SSH拡張機能を使えば、リモートサーバー上のファイルを直接編集できます。
2025年版では接続の安定性が大幅に向上しています。
tmux/screenでセッション管理
tmuxを使うと、SSH接続が切れても作業を継続できます:
# 新しいセッションを開始
tmux new-session -s work
# セッションに再接続
tmux attach-session -t work
GitHubやGitLabでの利用
GitHubでSSH鍵を設定する手順:
# Ed25519鍵を生成(2025年推奨)
ssh-keygen -t ed25519 -C "your_email@github.com"
# 公開鍵をコピーしてGitHubに登録
cat ~/.ssh/id_ed25519.pub
データベースへの安全な接続
MySQLやPostgreSQLに安全に接続:
# PostgreSQL用トンネル
ssh -L 5433:localhost:5432 user@db_server
# 接続コマンド
psql -h localhost -p 5433 -U postgres
トラブルシューティング

接続できない時の対処法
「Connection refused」エラー
原因と対策:
- SSHサービスが起動していない →
sudo systemctl status ssh
で確認 - ファイアウォールがブロックしている → ファイアウォール設定を確認
「Connection timeout」エラー
原因と対策:
- ネットワークの問題
- 間違ったIPアドレスやポート →
ssh -vvv user@host
で詳細なデバッグ情報を確認
Permission deniedエラー
よくある原因と対処法:
- 鍵ファイルの権限が間違っている →
chmod 600 ~/.ssh/id_ed25519
- authorized_keysの権限 →
chmod 600 ~/.ssh/authorized_keys
- ホームディレクトリの権限 →
chmod 700 ~
known_hostsの問題
サーバーの鍵が変更された場合の対処:
ssh-keygen -R hostname
2024-2025年の最新動向
OpenSSH 10.0の革新的変更(2025年4月)
ポスト量子暗号がデフォルトに
量子コンピュータへの耐性を持つML-KEM768x25519-sha256
アルゴリズムが標準採用されました。
これは将来の量子コンピュータによる暗号解読から、現在の通信を守るための重要な進化です。
古いアルゴリズムの削除
2015年から非推奨だったDSA署名のサポートが完全に削除されました。
セキュリティ構造の改善
sshdがsshd-auth
とsshd-session
に分離され、攻撃を受ける範囲が小さくなりました。
重要なセキュリティアップデート
**CVE-2024-6387(”regreSSHion”)**という重大な脆弱性が発見されました。
OpenSSH 8.5p1から9.7p1が影響を受けるため、すぐにOpenSSH 9.8p1以降にアップデートすることが重要です。
新しいツールとクラウド統合
ゼロトラストSSH
- Cloudflare Accessが短期間証明書による認証を提供
- 長期的な認証情報を排除し、セキュリティを向上
コンテナネイティブSSH
- Kubernetesとの統合が進化
- 自動証明書管理との連携
AI駆動のセキュリティ
- SSH通信パターンの異常検知
- 自動インシデント対応
パスワードレス認証の普及
FIDO2セキュリティキーのサポートがOpenSSHに統合されました。
YubiKey、Windows Hello、Touch IDなどのハードウェアベースの認証が可能に。
150億以上のアカウントがFIDO Alliance標準を採用し、パスワードレス認証が主流になりつつあります。
まとめ
SSHは、インターネット上で安全にリモートコンピュータを操作するための必須技術です。
2025年現在、量子コンピュータへの対策やゼロトラスト・アーキテクチャの採用など、大きな変革期を迎えています。
初心者の方へのアドバイス
- まず基本的なSSH接続から始める
- 公開鍵認証を必ず設定する
- 徐々に高度な機能を習得していく
重要なポイント
セキュリティを重視し、常に最新バージョンのソフトウェアを使用することが大切です。
特に重要なのは:
- OpenSSH 10.0以降へのアップデート
- Ed25519鍵の使用
この包括的なガイドを参考に、安全で効率的なリモート作業環境を構築してください。
コメント