LINUX SERVER GUIDE 目的別ガイド

WindowsからLinuxへSSH接続できないときの確認手順|エラー別に切り分ける

SSHトラブル対応Windows 11VirtualBoxAlmaLinux 9

VirtualBox上のAlmaLinux 9へSSH接続できないときの目的別ガイドです。WindowsとLinuxの操作場所を分け、接続拒否・タイムアウト・認証失敗・ホスト鍵変更を、表示の読み方と次の行動から確認します。

学習ガイドの目次 目的別ガイド
  1. 01自分のPCを準備する目安:45分
  2. 02Linuxをインストールする目安:60分
  3. 03WindowsからSSHで接続目安:25分
  4. 04Apacheでページを表示目安:30分

目的別ガイド

この記事のゴール

SSHのエラーがどの段階で起きているかを切り分け、必要な設定確認と接続先の照合ができる。

対象:第3回「WindowsからSSHで接続」と同じ構成で実習している方。

この記事の目次

最初に、操作する画面とエラー表示を確認する

SSHで接続できないときは、表示されたエラーから確認する場所を絞ります。このガイドは、SSH接続の基礎記事と同じ学習環境を使う目的別ガイドです。Windows 11のx64 PC、VirtualBox 7.2、AlmaLinux 9、Linuxユーザー labuser を前提にしています。該当する症状の節から進めてください。

画面使うユーザーと操作
WindowsのPowerShell現在Windowsにサインインしているユーザー。通常の権限で開き、SSH接続を試します。
VirtualBoxで開いたLinuxの画面Linuxの labuser でログインし、SSHサーバーの状態を調べます。管理者権限が必要なコマンドには sudo を付けます。

VirtualBoxで直接開くLinuxの画面を、ここではコンソールと呼びます。SSHが使えなくても、仮想マシンが正常に起動していれば、この画面からLinuxを操作できます。PowerShellで以前のSSH接続が開いたままなら、新しいPowerShellを開いてください。

まずWindowsで、SSHクライアントが使えるか確認します。

入力WindowsのSSHクライアントを確認
実行場所
Windows(PowerShell)
アカウント
現在のWindowsユーザー
権限
通常
ssh -V

OpenSSHを含むバージョンが表示されれば、次の接続コマンドを実行します。「認識されません」と表示された場合は、先に基礎記事のWindowsでSSHクライアントを確認する手順へ進みます。

入力同じ接続先でエラーを確認
実行場所
Windows(PowerShell)
アカウント
現在のWindowsユーザー
権限
通常
ssh -p 2222 labuser@127.0.0.1

-p 2222はWindows側で接続するポート番号です。127.0.0.1は、そのコマンドを実行しているコンピューター自身を表します。この接続コマンドはWindowsで実行します。VirtualBoxがWindowsの2222番ポートからLinuxの22番ポートへ通信を転送します。

表示された症状次に確認する場所
Connection refused接続要求が拒否されています。仮想マシンの起動とポート転送から確認します。
Connection timed out/Connection reset/応答がない接続を完了できないか、途中で切れています。Windows側の接続確認、Linux側のサービス確認の順に進みます。
labuser@127.0.0.1: Permission denied (...)/パスワード入力後の Permission denied, please try again.認証に失敗しています。ユーザー名・パスワード・認証方式を確認します。
REMOTE HOST IDENTIFICATION HAS CHANGED!以前の記録と接続先のホスト鍵が異なります。ホスト鍵の確認へ進みます。

接続待ちのまま進まない場合は、WindowsのPowerShellで Ctrl+C を押して接続の試行を中止し、入力待ちに戻ってから次の確認を行います。ssh: connect to host ... port ...: Permission deniedと出た場合は認証前の接続エラーなので、Windows側の接続確認へ進みます。

エラー名だけでは原因を一つに決められません。表示された全文を残し、設定を一つ確認・修正するごとに、同じ接続コマンドで変化を確かめます。初回の接続確認が出た場合も、ホスト鍵のフィンガープリントを照合してから接続してください。

接続拒否・タイムアウト:仮想マシンとポート転送を確認する

VirtualBoxマネージャーで linux-lab を確認します。「電源オフ」なら起動し、「一時停止」なら再開します。Linuxのログイン画面が出るまで待ってから、WindowsのPowerShellで次を実行します。

入力Windowsの2222番ポートにTCP接続できるか確認
実行場所
Windows(PowerShell)
アカウント
現在のWindowsユーザー
権限
通常
Test-NetConnection -ComputerName 127.0.0.1 -Port 2222

結果の TcpTestSucceeded を見ます。Trueなら、その時点でWindowsの2222番ポートへのTCP接続は成功しています。LinuxのSSHサーバーが応答したことや、ログインできることまでは確認できません。次のLinux側の確認へ進みます。Falseなら、以下の転送設定を確認します。PingSucceededだけで判断しないでください。

VirtualBoxの「設定(Settings)」→「ネットワーク(Network)」→「アダプター1(Adapter 1)」で、アダプターが有効、割り当てがNAT、「ケーブル接続(Cable Connected)」が有効になっているか確認します。「ポートフォワーディング(Port Forwarding)」のSSH用ルールは次の内容です。

項目この学習環境の値
プロトコルTCP
ホストIP/ホストポート127.0.0.1 / 2222
ゲストIP/ゲストポート空欄 / 22(LinuxはDHCPでアドレスを取得)

ホストはWindows、ゲストは仮想マシン内のLinuxです。設定を変更する必要がある場合は、Linuxのコンソールで次を実行し、VirtualBoxの状態が「電源オフ」になってから編集します。

入力転送設定を修正する場合だけLinuxを終了
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo poweroff

設定を保存したら仮想マシンを起動し、TCP接続の確認をやり直します。別の仮想マシンで同じホストポート2222を使っていると競合するため、同時に起動している仮想マシンのルールも確認します。ポートを使うアプリが不明な場合は、強制終了せず、最後の節の情報をそろえて調べます。

参照:MicrosoftのTCP接続確認、OracleのNATポート転送

Linux側でSSHサービスと通信の許可を確認する

ここからはVirtualBoxのLinuxコンソールで操作します。labuserでログインしてください。SSH接続を受け付けるサービスの名前は sshd です。

入力SSHサービスの状態を確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
通常
作業ディレクトリ
~
systemctl status sshd --no-pager
表示で見る文字意味と次の行動
Active: active (running)実行中です。下の22番ポートとファイアウォールを確認します。
Active: inactive (dead)停止しています。次のコマンドで起動し、同じ状態確認をやり直します。
Active: failed起動や動作中に失敗した状態です。下の設定検査と、最後の節のログ確認へ進みます。
Unit sshd.service could not be found基礎記事のSSHサーバーの準備で、openssh-serverの導入を確認します。

サービスが停止していた場合だけ、起動と次回以降の自動起動を設定します。

入力停止していたSSHサービスを起動
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo systemctl enable --now sshd

failedが表示された場合や、起動できない場合は、設定ファイルとホスト鍵の検査を実行します。エラーが出たら、その内容を残します。何も表示されず入力待ちに戻れば、この検査では問題が見つかっていません。接続成功を保証する検査ではないため、ログも確認します。原因に該当する設定を修正した場合は、検査をやり直してから上の起動コマンドを実行し、状態を再確認します。

入力SSHサービスが起動できない場合に設定を検査
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo /usr/sbin/sshd -t

22番ポートで接続を待っているか

サービスが実行中なら、TCPの22番ポートを調べます。

入力Linuxの22番ポートの待ち受けを確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo ss -lntp 'sport = :22'

LISTENは接続待ちの状態です。この学習環境では、Local Address:Portに 0.0.0.0:22、Processに sshd を含む行が目安になります。0.0.0.0はLinux内のすべてのIPv4アドレスを指します。先ほどのVirtualBoxのホストIPとは別の設定です。

見出しだけで行がない場合や、127.0.0.1:22だけの場合は、NATから接続を受けられる待ち受けになっていません。SSHのポートや待ち受けアドレスを変更した覚えがないか確認し、ログを調べます。

firewalldでSSHが許可されているか

firewalldは、Linuxで許可する通信を管理するソフトウェアです。まず実行中か確認します。

入力firewalldの動作を確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
通常
作業ディレクトリ
~
systemctl is-active firewalld

activeなら次へ進みます。それ以外なら、基礎記事の導入・起動手順を確認します。停止しているという表示だけで、今回の接続失敗の原因とは断定できません。

入力ネットワークに適用されているゾーンを確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo firewall-cmd --get-active-zones
表示の読み方の例(名前は環境により異なります) 入力不要
public
  interfaces: enp0s3

ゾーンは、許可する通信をまとめた設定です。この例ではネットワークインターフェース enp0s3 に public が適用されています。以下の public は、実際のゾーン名に合わせてください。インターフェースの行が出ないときは、先にLinuxのネットワーク接続状態を確認します。

入力現在の設定と永続設定でSSHの許可を確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo firewall-cmd --zone=public --query-service=ssh
sudo firewall-cmd --permanent --zone=public --query-service=ssh

1行目は現在有効な設定、2行目は再起動後にも使う永続設定です。両方が yesなら許可済みです。どちらかが noの場合だけ、同じゾーンにSSHの許可を追加します。

入力必要な場合だけ現在と永続設定の両方でSSHを許可
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo firewall-cmd --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --add-service=ssh

この2行は、現在の設定と永続設定をそれぞれ変更します。successまたは既に許可済みを示す ALREADY_ENABLED を確認し、上の照会を再実行します。両方が yesになったらWindowsから接続を試します。

Permission denied:ユーザー名と認証方法を確認する

パスワード入力後の Permission denied, please try again.や、labuser@127.0.0.1: Permission denied (...)は、認証に失敗したという意味です。何度も入力し直す前に、次の順で確認します。パスワード認証で接続する、この学習環境を対象とした手順です。

  1. 接続コマンドが labuser@127.0.0.1 になっているか確認します。labuserはWindowsのユーザー名ではなく、AlmaLinuxのインストール時に作ったユーザー名です。
  2. 入力するのはLinuxのlabuserのパスワードです。WindowsのPINではありません。パスワード入力中に文字や * が表示されないのは通常の動作です。
  3. VirtualBoxのLinuxコンソールがログイン画面なら、同じユーザー名とパスワードでログインできるか確認します。既にログイン済みなら、その画面はログアウトせずに残し、SSHサービスのログ確認に使います。
確認結果次の行動
コンソールでもログインできないユーザー名、Caps Lock、日本語/英語のキーボード配列による記号の違いを確認します。パスワードを忘れた場合はアカウントの復旧が必要で、SSHの通信設定を変更しても直りません。
コンソールでは入れるが、SSHではパスワードが拒否されるWindowsで一度だけ再試行し、直後にLinux側のログを確認します。SSHでのユーザー制限やアカウントの状態も確認対象です。
Permission denied (publickey)など、パスワードを求められずに終わる公開鍵認証のみを使う設定など、基礎記事とは異なる認証方法になっている可能性があります。最後の節の詳細表示で、サーバーが案内する認証方式を確認します。

公開鍵認証は、ユーザーの鍵を使ってログインを許可する方法です。パスワードの入力ミスとは対処が異なります。既に鍵でログインするよう設定した環境なら、その設定で使用する鍵を確認します。認証方法が分からないまま設定を上書きせず、表示された認証方式と最近変更した設定を照合してください。

ホスト鍵が変わったときは、接続先を確かめてから登録を更新する

REMOTE HOST IDENTIFICATION HAS CHANGED!は、Windowsに記録されたホスト鍵と、今回の接続先が提示した鍵が異なるという警告です。ホスト鍵はSSHサーバーを識別するための鍵で、ユーザーのログイン用パスワードや認証用の鍵とは役割が異なります。

仮想マシンを再インストールした場合などにも起こります。まず接続を中止し、次の3点を確認します。

  1. Linuxの再インストールや仮想マシンの作り直しなど、鍵が変わる理由を説明できるか。
  2. VirtualBoxで、意図した linux-lab を起動しているか。
  3. Windowsの2222番ポートの転送先が、その仮想マシンになっているか。

次に、VirtualBoxのLinuxコンソールでホスト鍵のフィンガープリントを表示します。フィンガープリントは公開鍵から計算する確認用の値で、鍵本体ではありません。警告の中で今回の接続先が提示した鍵の方式を確認します。古い登録の鍵方式と取り違えないでください。今回提示された鍵が ED25519 の場合は次を使います。

入力Linuxのホスト鍵のフィンガープリントを確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
通常
作業ディレクトリ
~
ssh-keygen -l -E sha256 -f /etc/ssh/ssh_host_ed25519_key.pub
フィンガープリントの表示形式(実測ログではありません) 入力不要
256 SHA256:〈公開鍵から計算された値〉 … (ED25519)

警告に ECDSAまたは RSA と表示されている場合は、次のコマンドで対応する鍵を確認します。.pubは公開鍵のファイルです。

入力ECDSAまたはRSAが表示された場合の確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
通常
作業ディレクトリ
~
ssh-keygen -l -E sha256 -f /etc/ssh/ssh_host_ecdsa_key.pub
ssh-keygen -l -E sha256 -f /etc/ssh/ssh_host_rsa_key.pub

Windowsの警告に表示された新しい鍵のフィンガープリントと、Linuxのコンソールで確認した値を照合します。同じ鍵方式の SHA256:から始まる文字列が、最後まで一致するかを確認してください。ファイルが見つからない場合は、確認のために新しい鍵を生成せず、対象の仮想マシンと鍵方式を調べ直します。

入力確認できた場合だけ、この接続先のホスト鍵登録を削除
実行場所
Windows(PowerShell)
アカウント
現在のWindowsユーザー
権限
通常
ssh-keygen -R "[127.0.0.1]:2222"

このコマンドは、Windowsユーザーの known_hosts(接続先の公開鍵を記録するファイル)から、127.0.0.1:2222に対応する登録だけを削除します。ファイル全体を削除する操作ではありません。

最初のSSHコマンドで再接続し、初回と同じ確認が出たら、もう一度フィンガープリントを照合してからyesを入力します。鍵の確認を省略する設定に変更する必要はありません。

参照:OpenSSHのフィンガープリント表示と接続先を指定した登録削除

解消しない場合は、接続直後の表示とログをそろえる

ここまで確認しても接続できない場合は、Windowsで接続経過を詳しく表示します。-vは診断用の表示を増やす指定、ConnectTimeout=10は接続や初期のSSH通信を待つ時間を10秒にする指定です。パスワード入力の制限時間ではありません。

入力Windowsで接続経過を確認
実行場所
Windows(PowerShell)
アカウント
現在のWindowsユーザー
権限
通常
ssh -v -o ConnectTimeout=10 -p 2222 labuser@127.0.0.1
表示の手がかり読み方
Connecting to接続先とポートを確認します。今回の宛先は127.0.0.1、ポートは2222です。
Connection establishedTCP接続は成立しています。その後のSSH通信や認証で止まっていないか、続く行を確認します。
Authentications that can continueSSHサーバーが案内する認証方式です。パスワード認証を使う想定なのに password がなければ、認証設定の違いを確認します。

再試行した直後に、VirtualBoxのLinuxコンソールでSSHサービスのログを読みます。ログは、起きたことを時刻とともに記録したものです。

入力LinuxでSSHサービスの最近のログを確認
実行場所
Linux(VirtualBoxの画面)
アカウント
labuser
権限
sudo
作業ディレクトリ
~
sudo journalctl -u sshd -n 30 --no-pager

-u sshdでSSHサービスに絞り、-n 30で最近の30件を表示します。今の再試行に対応する時刻を探してください。Failed passwordならパスワード認証の失敗、Invalid userなら指定されたユーザーが存在しないことが手がかりです。接続したはずの時刻に記録がなくても、それだけで通信が届いていないとは断定できません。

調べるときや人に相談するときは、次の情報をまとめます。公開する場合はユーザー名や個人のフォルダー名などを必要に応じて伏せ、パスワードや秘密鍵は共有しないでください。

  • 最初から接続できないのか、接続できていたものが急に失敗したのか
  • Windowsで実行した接続コマンドと、エラーの全文
  • TcpTestSucceeded、sshdの状態、22番ポートとfirewalldの確認結果
  • 再試行の時刻、直前に変えた設定、その時刻のSSHサービスのログ

接続できたら、基礎記事の whoami と hostname による確認へ戻ります。labuserと linux-lab を確認し、何を直したら接続できたかを残しておきましょう。

できたことを確認

  • WindowsとLinuxの操作場所を区別して確認できる
  • 接続失敗が通信・認証・ホスト鍵のどの段階か説明できる
  • ホスト鍵の警告を無条件に解除せず、同じ鍵方式のフィンガープリントを照合できる
  • 修正後の接続確認、または追加調査に必要な情報の整理ができる

参考資料・対象環境

この教材の対象と確認状況

Windows 11(Intel / AMDの64bit PC)、VirtualBox 7.2系、AlmaLinux 9系を対象にしています。2026年11月8日時点の公式資料を確認して作成しています。画面名はバージョンや表示言語で異なる場合があります。

掲載した出力は読み方を示す表示例です。この版はWindows実機で全手順を通した動作確認は未実施です。研修で使用する前に、ご利用のPC環境で事前確認をお願いします。

AZWorkが独自に構成した実習ガイドです。体系的に学ぶ参考資料として、LPI-JapanのLinuxサーバー構築標準教科書もご覧ください。