トラブルシューティング

SSH "Connection closed by remote host":原因と対処法

サーバーが受け入れた後に接続を切った——たいていは fail2ban のブロック、sshd の再起動/過負荷、または接続数の上限です。refused や timed out との見分け方、ブロックの確認方法、サーバーログの読み方を解説します。

CC Chen Chen· 創業者·2026年6月24日·6 分で読めます

"Connection closed by remote host" の意味

サーバーはあなたの接続を受け入れたうえで、意図的に切断しました。これが refused(何も待ち受けていない)や timed out(まったく応答がない)との決定的な違いです。ここでは何かが応答し、その後で切られています。Connection closed by remote hostConnection reset by peerkex_exchange_identification: Connection closed by remote host といったバリエーションは、ほぼ常に次のいずれかを意味します。fail2ban にブロックされた、サーバーの sshd が再起動中/過負荷、または接続数の上限に達した、です。

原因、可能性の高い順

#原因手がかり
1ログイン失敗後の fail2ban / IP ブロック昨日まで動いていたのに、失敗を何度かした今日は不通
2sshd が再起動中、または再起動直後サーバーが再起動中。1 分後には動く
3接続が多すぎる(MaxStartups)混雑したサーバー、負荷時に断続的
4hosts.deny / TCP wrappers / ファイアウォールのリセット特定の IP がサーバー側でブロックされている
5そのポートで SSH 以外のサービスに当たっているポートが違う——別のものが応答して切断する

1 — 最有力の原因:fail2ban にブロックされた

このエラーの前に鍵/パスワードの失敗が数回あったなら、fail2ban(またはクラウドプロバイダーの同等機能)があなたの IP をブロックした可能性が高いです。接続した瞬間にパケットを破棄するため、「closed by remote host」として現れます。まだ到達できる別のマシンから確認して解除しましょう:

sudo fail2ban-client status sshd          # is your IP listed?
sudo fail2ban-client set sshd unbanip 1.2.3.4

スマホでは特によくあります。IP が変わる(Wi-Fi からモバイル回線へ)ことに加え、鍵の試行を 1、2 回間違えるだけでブロックが発動するのに十分です。根本の認証問題を直せば(Permission denied を参照)、再発を止められます。

2 — sshd の再起動、リブート、または過負荷

マシンが再起動中だったり、sshd が設定をリロード中だったりすると、その時間帯の接続は切断されます。1 分待ってから再試行してください。慢性的に混雑したサーバーでは、sshd の MaxStartups スロットル(デフォルト 10:30:100)が、処理中の未認証接続が多すぎると切断を始めます——負荷時に断続的な切断が見られます。サーバー側で値を上げると改善します:

# /etc/ssh/sshd_config
MaxStartups 30:50:100
# then: sudo systemctl reload ssh

3 — サーバー自身のログを見る

確かな答えはサーバー上にあります。アクセスできる手段(コンソール、別のセッション)から:

sudo journalctl -u ssh -n 50      # or: tail -n 50 /var/log/auth.log

ブロックなのか、拒否されたユーザーなのか、hosts.deny なのか、設定エラーなのかをはっきり示してくれます——推測を一行の診断に変えてくれます。

スマホから復旧する

モバイルでのつらい点は、たった今あなたを切断したマシンを調べるために、その箱に SSH で入れないことが多いことです。そのネットワーク上に到達できる別のマシンがあれば、そこを経由して fail2ban-client / journalctl のチェックを実行しましょう。そして生のエラーを前に、5 つの原因のどれなのか分からないときは、それを選択してアシスタントに尋ねてください——TermAI の AI は実際のメッセージとあなたのコンテキストを読み、ブロック、スロットル、再起動のどれっぽいかを、確認用のコマンドとともに教えてくれます。

SSH 切断メッセージを解釈する TermAI の AI アシスタント
closed-by-remote-host には、見た目がそっくりな 5 つのよくある原因があります。エラーを選択すると、AI があなたのセッションに即して、最も可能性の高いものに絞り込み、確認用のコマンドを提示します。

FAQ

"Connection closed by remote host" の原因は何ですか?
サーバーが受け入れた後に接続を切ったということで、最も多いのは fail2ban の IP ブロック、sshd の再起動/過負荷、接続数の上限(MaxStartups)、またはホストベースのブロックです。サーバーの認証ログを確認してください。

connection refused とどう違いますか?
Refused = 何も待ち受けていない。Closed by remote host = 何かが応答し、その後で意図的に切られた、です。

何度もブロックされます——なぜ?
認証の繰り返し失敗(多くは誤った鍵、または提示されない鍵)が fail2ban を発動させます。認証問題そのものを直し、固定アドレスがあればホワイトリストに入れてください。

kex_exchange_identification: Connection closed とは何ですか?
同じ仲間です——サーバーが最初のハンドシェイク中に接続を切ったもので、通常はブロック、スロットル、またはそのポートで SSH 以外のサービスに当たっていることが原因です。

クイックファクト

  • 意味:サーバーが受け入れた後に意図的に接続を切った(refused でも timed out でもない)
  • 最有力の原因:ログイン失敗後の fail2ban / IP ブロック——fail2ban-client status sshd
  • その他:sshd の再起動、負荷時の MaxStartups スロットル、hosts.deny、ポート間違い
  • 診断:サーバー上の journalctl -u ssh / /var/log/auth.log が原因を明示する
  • モバイルのヒント:IP の変化 + 鍵の試行を 1、2 回間違えると簡単にブロックが発動——認証の根本原因を直す
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog