WindowsからLinuxへSSH接続できないときの確認手順|エラー別に切り分ける
VirtualBox上のAlmaLinux 9へSSH接続できないときの目的別ガイドです。WindowsとLinuxの操作場所を分け、接続拒否・タイムアウト・認証失敗・ホスト鍵変更を、表示の読み方と次の行動から確認します。
学習ガイドの目次 目的別ガイド
目的別ガイド
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(PowerShell)
- アカウント
- 現在のWindowsユーザー
- 権限
- 通常
ssh -VOpenSSHを含むバージョンが表示されれば、次の接続コマンドを実行します。「認識されません」と表示された場合は、先に基礎記事の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(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(VirtualBoxの画面)
- アカウント
- labuser
- 権限
- sudo
- 作業ディレクトリ
- ~
sudo poweroff設定を保存したら仮想マシンを起動し、TCP接続の確認をやり直します。別の仮想マシンで同じホストポート2222を使っていると競合するため、同時に起動している仮想マシンのルールも確認します。ポートを使うアプリが不明な場合は、強制終了せず、最後の節の情報をそろえて調べます。
Linux側でSSHサービスと通信の許可を確認する
ここからはVirtualBoxのLinuxコンソールで操作します。labuserでログインしてください。SSH接続を受け付けるサービスの名前は sshd です。
- 実行場所
- 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の導入を確認します。 |
サービスが停止していた場合だけ、起動と次回以降の自動起動を設定します。
- 実行場所
- Linux(VirtualBoxの画面)
- アカウント
- labuser
- 権限
- sudo
- 作業ディレクトリ
- ~
sudo systemctl enable --now sshdfailedが表示された場合や、起動できない場合は、設定ファイルとホスト鍵の検査を実行します。エラーが出たら、その内容を残します。何も表示されず入力待ちに戻れば、この検査では問題が見つかっていません。接続成功を保証する検査ではないため、ログも確認します。原因に該当する設定を修正した場合は、検査をやり直してから上の起動コマンドを実行し、状態を再確認します。
- 実行場所
- Linux(VirtualBoxの画面)
- アカウント
- labuser
- 権限
- sudo
- 作業ディレクトリ
- ~
sudo /usr/sbin/sshd -t22番ポートで接続を待っているか
サービスが実行中なら、TCPの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で許可する通信を管理するソフトウェアです。まず実行中か確認します。
- 実行場所
- Linux(VirtualBoxの画面)
- アカウント
- labuser
- 権限
- 通常
- 作業ディレクトリ
- ~
systemctl is-active firewalldactiveなら次へ進みます。それ以外なら、基礎記事の導入・起動手順を確認します。停止しているという表示だけで、今回の接続失敗の原因とは断定できません。
- 実行場所
- Linux(VirtualBoxの画面)
- アカウント
- labuser
- 権限
- sudo
- 作業ディレクトリ
- ~
sudo firewall-cmd --get-active-zonespublic interfaces: enp0s3
ゾーンは、許可する通信をまとめた設定です。この例ではネットワークインターフェース enp0s3 に public が適用されています。以下の public は、実際のゾーン名に合わせてください。インターフェースの行が出ないときは、先にLinuxのネットワーク接続状態を確認します。
- 実行場所
- Linux(VirtualBoxの画面)
- アカウント
- labuser
- 権限
- sudo
- 作業ディレクトリ
- ~
sudo firewall-cmd --zone=public --query-service=ssh
sudo firewall-cmd --permanent --zone=public --query-service=ssh1行目は現在有効な設定、2行目は再起動後にも使う永続設定です。両方が yesなら許可済みです。どちらかが noの場合だけ、同じゾーンに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 (...)は、認証に失敗したという意味です。何度も入力し直す前に、次の順で確認します。パスワード認証で接続する、この学習環境を対象とした手順です。
- 接続コマンドが
labuser@127.0.0.1になっているか確認します。labuserはWindowsのユーザー名ではなく、AlmaLinuxのインストール時に作ったユーザー名です。 - 入力するのはLinuxのlabuserのパスワードです。WindowsのPINではありません。パスワード入力中に文字や
*が表示されないのは通常の動作です。 - VirtualBoxのLinuxコンソールがログイン画面なら、同じユーザー名とパスワードでログインできるか確認します。既にログイン済みなら、その画面はログアウトせずに残し、SSHサービスのログ確認に使います。
| 確認結果 | 次の行動 |
|---|---|
| コンソールでもログインできない | ユーザー名、Caps Lock、日本語/英語のキーボード配列による記号の違いを確認します。パスワードを忘れた場合はアカウントの復旧が必要で、SSHの通信設定を変更しても直りません。 |
| コンソールでは入れるが、SSHではパスワードが拒否される | Windowsで一度だけ再試行し、直後にLinux側のログを確認します。SSHでのユーザー制限やアカウントの状態も確認対象です。 |
Permission denied (publickey)など、パスワードを求められずに終わる | 公開鍵認証のみを使う設定など、基礎記事とは異なる認証方法になっている可能性があります。最後の節の詳細表示で、サーバーが案内する認証方式を確認します。 |
公開鍵認証は、ユーザーの鍵を使ってログインを許可する方法です。パスワードの入力ミスとは対処が異なります。既に鍵でログインするよう設定した環境なら、その設定で使用する鍵を確認します。認証方法が分からないまま設定を上書きせず、表示された認証方式と最近変更した設定を照合してください。
ホスト鍵が変わったときは、接続先を確かめてから登録を更新する
REMOTE HOST IDENTIFICATION HAS CHANGED!は、Windowsに記録されたホスト鍵と、今回の接続先が提示した鍵が異なるという警告です。ホスト鍵はSSHサーバーを識別するための鍵で、ユーザーのログイン用パスワードや認証用の鍵とは役割が異なります。
仮想マシンを再インストールした場合などにも起こります。まず接続を中止し、次の3点を確認します。
- Linuxの再インストールや仮想マシンの作り直しなど、鍵が変わる理由を説明できるか。
- VirtualBoxで、意図した
linux-labを起動しているか。 - Windowsの2222番ポートの転送先が、その仮想マシンになっているか。
次に、VirtualBoxのLinuxコンソールでホスト鍵のフィンガープリントを表示します。フィンガープリントは公開鍵から計算する確認用の値で、鍵本体ではありません。警告の中で今回の接続先が提示した鍵の方式を確認します。古い登録の鍵方式と取り違えないでください。今回提示された鍵が ED25519 の場合は次を使います。
- 実行場所
- Linux(VirtualBoxの画面)
- アカウント
- labuser
- 権限
- 通常
- 作業ディレクトリ
- ~
ssh-keygen -l -E sha256 -f /etc/ssh/ssh_host_ed25519_key.pub256 SHA256:〈公開鍵から計算された値〉 … (ED25519)
警告に ECDSAまたは RSA と表示されている場合は、次のコマンドで対応する鍵を確認します。.pubは公開鍵のファイルです。
- 実行場所
- 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.pubWindowsの警告に表示された新しい鍵のフィンガープリントと、Linuxのコンソールで確認した値を照合します。同じ鍵方式の SHA256:から始まる文字列が、最後まで一致するかを確認してください。ファイルが見つからない場合は、確認のために新しい鍵を生成せず、対象の仮想マシンと鍵方式を調べ直します。
- 実行場所
- Windows(PowerShell)
- アカウント
- 現在のWindowsユーザー
- 権限
- 通常
ssh-keygen -R "[127.0.0.1]:2222"このコマンドは、Windowsユーザーの known_hosts(接続先の公開鍵を記録するファイル)から、127.0.0.1:2222に対応する登録だけを削除します。ファイル全体を削除する操作ではありません。
最初のSSHコマンドで再接続し、初回と同じ確認が出たら、もう一度フィンガープリントを照合してからyesを入力します。鍵の確認を省略する設定に変更する必要はありません。
解消しない場合は、接続直後の表示とログをそろえる
ここまで確認しても接続できない場合は、Windowsで接続経過を詳しく表示します。-vは診断用の表示を増やす指定、ConnectTimeout=10は接続や初期のSSH通信を待つ時間を10秒にする指定です。パスワード入力の制限時間ではありません。
- 実行場所
- Windows(PowerShell)
- アカウント
- 現在のWindowsユーザー
- 権限
- 通常
ssh -v -o ConnectTimeout=10 -p 2222 labuser@127.0.0.1| 表示の手がかり | 読み方 |
|---|---|
Connecting to | 接続先とポートを確認します。今回の宛先は127.0.0.1、ポートは2222です。 |
Connection established | TCP接続は成立しています。その後のSSH通信や認証で止まっていないか、続く行を確認します。 |
Authentications that can continue | SSHサーバーが案内する認証方式です。パスワード認証を使う想定なのに password がなければ、認証設定の違いを確認します。 |
再試行した直後に、VirtualBoxの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の操作場所を区別して確認できる
- 接続失敗が通信・認証・ホスト鍵のどの段階か説明できる
- ホスト鍵の警告を無条件に解除せず、同じ鍵方式のフィンガープリントを照合できる
- 修正後の接続確認、または追加調査に必要な情報の整理ができる
参考資料・対象環境
- Microsoft Learn:OpenSSH for Windowsの導入
- Microsoft Learn:Test-NetConnection
- Oracle VirtualBox 7.2:Virtual Networking
- RHEL 9:OpenSSHによるシステム間の安全な通信
- RHEL 9:ファイアウォールとパケットフィルターの設定
- RHEL 9:ログを使ったトラブルシューティング
- RHEL 9:ネットワーク性能の調整(ssによるTCP待ち受けの確認)
- firewalld:firewall-cmdマニュアル
- OpenSSH:sshマニュアル(接続と詳細表示)
- OpenSSH:ssh_configマニュアル(ConnectTimeout)
- OpenSSH:sshdマニュアル(設定の検査)
- OpenSSH:ssh-keygenマニュアル(フィンガープリントと登録削除)
この教材の対象と確認状況
Windows 11(Intel / AMDの64bit PC)、VirtualBox 7.2系、AlmaLinux 9系を対象にしています。2026年11月8日時点の公式資料を確認して作成しています。画面名はバージョンや表示言語で異なる場合があります。
掲載した出力は読み方を示す表示例です。この版はWindows実機で全手順を通した動作確認は未実施です。研修で使用する前に、ご利用のPC環境で事前確認をお願いします。
AZWorkが独自に構成した実習ガイドです。体系的に学ぶ参考資料として、LPI-JapanのLinuxサーバー構築標準教科書もご覧ください。