Hyper-V Nano Server の EMS を名前付きパイプで使う:PuTTY が「Unable to open serial port」で開けない原因と対処

Hyper-V 上の Nano Server で EMS(Emergency Management Services)を有効化すると、GUI がない環境でもシリアル経由で起動直後からトラブルシュートできます。ただし COM1 を名前付きパイプに割り当て、Windows 10 ホストから PuTTY(Serial)で開こうとすると「Unable to open serial port」で接続できないことがあります。原因と対処を具体的に整理します。

目次

発生する症状:PuTTY で「Unable to open serial port」になり、名前付きパイプを開けない

今回の前提は次のような構成です。

項目内容(例)ポイント
仮想化基盤Windows 10 上の Hyper-Vホスト側から PuTTY を起動して接続する
ゲスト OSNano Server VM基本的に GUI がなく、障害時にコンソールが欲しい
目的EMS(Emergency Management Services)を有効化シリアル(SAC)から復旧・確認できるようにする
COM1 の割り当て名前付きパイプ:\\.\pipe\web01ホストの PuTTY からこのパイプへ接続したい

この状態で PuTTY の接続タイプを Serial にして、Serial line に \\.\pipe\web01 を入れて接続すると、次のようなエラーで止まります。

  • Unable to open connection to \\.\pipe\web01
  • Unable to open serial port

見た目は「シリアル設定が違うのかな?」と感じやすいのですが、実際には 名前付きパイプへのアクセス権(権限)が原因になっているケースが多いです。

結論:PuTTY を管理者権限で実行すると接続できる可能性が高い

最優先で試すべき対処はこれです。

対処:PuTTY(putty.exe)を「管理者として実行」し、同じ設定で再接続する。

Hyper-V が作る名前付きパイプは、状況によっては 管理者権限(昇格トークン)がないと開けない ACL になっていることがあります。通常権限の PuTTY からは内部的に「アクセス拒否」になり、PuTTY 側には “serial port を開けない” という形で返ってきます。

手順(GUI):PuTTY を「管理者として実行」して接続する

  1. PuTTY を終了していることを確認します(起動中なら閉じる)。
  2. スタートメニューや putty.exe を右クリックし、「管理者として実行」を選びます。
  3. PuTTY の Session で Connection type: Serial を選びます。
  4. Serial line に \\.\pipe\web01、Speed に 115200 を入力します。
  5. Open を押して接続します。

これだけで繋がる場合は、ほぼ「権限が原因」だったと判断してよいです。

手順(コマンドライン):管理者で PuTTY を起動して一発接続

運用で何度も接続する場合は、ショートカットやコマンドライン起動が便利です。PuTTY はオプションでシリアル指定ができます。

putty.exe -serial \\.\pipe\web01 -sercfg 115200,8,n,1,N

※最後の N はフロー制御(None)を意味します。環境によっては設定画面から保存しておく方が確実です。

そもそも EMS と「名前付きシリアル パイプ」で何ができるのか

EMS(Emergency Management Services)は、Windows が提供するシリアル経由の緊急管理機能です。サーバーがネットワークに出られない、GUI がない、リモート管理が効かないといった状況でも、起動直後からコンソールで状態確認ができます。

物理サーバーでは実際のシリアルポートを使うことが多いですが、Hyper-V では COM ポートを名前付きパイプに接続できます。つまり、ホスト側のアプリ(PuTTY など)を「シリアル端末」として使い、ゲストの EMS/SAC コンソールへ入れるわけです。

設定の全体像:Hyper-V(COM1)とゲスト(EMS)の両方が揃って初めて動く

「パイプを開けない」問題は PuTTY 側に出ますが、接続に必要な要素は大きく分けて 2 つです。

層設定する場所要点
仮想ハードウェアHyper-V の VM 設定(COM1)COM1 を「名前付きパイプ」にし、パイプ名と方向を正しくする
OS(起動設定)Nano Server の BCD(bcdedit)EMS を有効化し、ポートとボーレートを合わせる

どちらか片方が欠けると、接続自体はできても画面が何も出ない、または接続すらできないといった状況になります。この記事では、特に「接続すらできない」側の原因を優先して潰していきます。

Hyper-V 側の確認ポイント:COM1 の「名前付きパイプ」と方向

Hyper-V マネージャーで VM の設定を開き、COM1 を確認します。ここが少しでもズレていると、PuTTY は正しく接続できません。

設定項目推奨(PuTTY から接続する場合)よくあるミス
接続先名前付きパイプ「物理 COM ポート」になっている
パイプ名\\.\pipe\web01(完全一致)\\.\pipe\web01 の綴り違い、余計な空白、別名
このエンドはサーバークライアントになっていて、外部アプリが接続先を作れない
相手のエンドはクライアント設定の意図が逆転している

ポイントは方向です。PuTTY は基本的に 「既に存在する名前付きパイプへクライアントとして接続」する動きになります。そのため、Hyper-V 側は「このエンドはサーバー」にして、パイプ(例:\\.\pipe\web01)を作って待ち受ける構成が分かりやすく、失敗しにくいです。

パイプが作られているかをホストで確認する

VM を起動した状態で、ホスト側からパイプの存在を確認すると切り分けが楽になります。

dir \\.\pipe\

PowerShell なら次の方法でも確認できます。

Get-ChildItem \\.\pipe\ | Where-Object Name -like '*web01*'

ここで web01 が見えない場合は、Hyper-V 側の COM1 設定が反映されていない、VM が停止している、方向が逆でパイプが作られていない、といった可能性が上がります。

PuTTY 側の推奨設定:まずは「王道の 115200 / フロー制御なし」から

シリアルのパラメータが違っても「開けない」にはなりにくいのですが、接続後に文字化けしたり、何も表示されない原因になります。EMS は一般的に 115200 bps が使われることが多いので、まずはこの値で合わせるのが無難です。

PuTTY 設定値(例)補足
Connection typeSerialSSH や Telnet ではなく Serial を選ぶ
Serial line\\.\pipe\web01COM1 などではなく、名前付きパイプのパスを入れる
Speed (baud)115200ゲストの EMS 設定と揃える
Data bits / Stop bits8 / 1標準設定のままでよいことが多い
ParityNone通常は None
Flow controlNoneRTS/CTS にすると入力が止まることがある

なぜ「管理者として実行」で直るのか:名前付きパイプの ACL と UAC の罠

名前付きパイプは Windows の IPC(プロセス間通信)機構で、ファイルに近い扱いでアクセス制御(ACL)がかかります。Hyper-V が作成するパイプは、作成元プロセス(VMWP など)側でセキュリティが設定されます。

ここでハマりやすいのが UAC です。たとえ「管理者グループ」に所属していても、通常起動のアプリは 非昇格トークンで動き、管理者権限が必要なオブジェクトにアクセスできないことがあります。PuTTY を昇格して起動すると、その差分でパイプを開けるようになり、エラーが消えるという流れです。

つまり、設定や配線が正しいのに開けないときは、まず「権限の問題では?」と疑い、管理者として実行を最初に試すのが効率的です。

それでも開けない場合の追加チェック:ありがちな落とし穴を一気に潰す

管理者で起動してもエラーが出る場合、次のポイントを上から順に確認すると原因に辿り着きやすいです。

チェック項目確認方法典型症状
パイプ名が完全一致しているかHyper-V の COM1 と PuTTY の Serial line を見比べる(コピペ推奨)Unable to open connection / そもそもパイプが存在しない
方向(サーバー/クライアント)が想定通りかHyper-V の COM1 で「このエンドはサーバー」になっているか確認VM は起動しているのに dir \\.\pipe\ にパイプが出ない
VM が起動しているかHyper-V マネージャーで状態確認停止中は当然パイプが作られず、接続できない
別プロセスが同じパイプを掴んでいないか同じ PC で別の端末ソフトを起動していないか確認多重接続できない構成だと 2 台目で開けない
PuTTY を「Serial」で開いているかConnection type が Serial になっているかSSH などのままだと当然接続できない
セキュリティソフトやポリシーでブロックされていないか他の管理ツールも同様にブロックされるか切り分け管理者でも開けない、イベントログに拒否が出る

ゲスト(Nano Server)側の確認:EMS が有効でないと「繋がっても何も出ない」

今回の本題は「開けない」ですが、権限問題を解消して接続できた後に画面が真っ黒のままで悩むことも多いので、最低限の確認ポイントもまとめます。

Nano Server 側で EMS が有効化されているかは、OS 内から bcdedit で確認できます(リモート PowerShell などで入れる前提)。代表的な設定例は次の通りです。

bcdedit /ems {current} on
bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200

設定値は環境により異なる場合がありますが、重要なのは EMSPORT(COM 番号) と EMSBAUDRATE(速度) を Hyper-V / PuTTY と揃えることです。例えば Hyper-V 側で COM1 を使っているなら、EMSPORT も 1 を選ぶのが自然です。

なお、設定変更後は再起動が必要になることがあります。接続はできるが何も出ない場合は、VM を再起動して起動ログの段階から確認してみてください。

接続できたら何が見える?:SAC コンソールの目安

PuTTY が正しくつながると、ゲストの状態によっては起動メッセージの後に SAC(Special Administration Console)風のプロンプトが表示されます。環境によって表示は多少異なりますが、「SAC」や「channel」といった文言が出ていれば概ね成功です。

ここまで到達すれば、あとはネットワーク復旧前の緊急時でも最低限の操作ができます。たとえば、起動に失敗してリモート PowerShell が入れないとき、IP 設定が壊れていて WinRM が応答しないときなどに、状態確認の糸口になります。

運用のコツ:この問題を再発させないための実践ポイント

最後に、同じエラーで再び時間を溶かさないための小ワザ・設計ポイントをまとめます。

  • パイプ名は VM 名と用途を含める:\\.\pipe\nano-web01-ems のようにして衝突を防ぎます。
  • PuTTY のセッションを保存する:Serial line や速度を固定し、入力ミスを減らします。
  • 接続用のショートカットは「管理者として実行」に設定:毎回右クリックする手間と権限ミスを減らします。
  • 方向(サーバー/クライアント)は方針を統一:「Hyper-V 側がサーバー」を標準にすると、端末側がシンプルです。
  • 多重接続が必要なら設計段階で検討:1 本のパイプに 1 クライアントしかつながらない運用だと、切り分け時に詰まります。

まとめ:まずは権限を疑い、管理者 PuTTY で素早く復旧する

Hyper-V の名前付きシリアル パイプは、設定さえ決まれば Nano Server の EMS を非常に強力にしてくれます。一方で、エラーの見え方が「シリアルが開けない」なので、設定値ばかり追いかけてしまいがちです。

同じ症状に当たったら、最初に PuTTY を管理者として実行し、それでもダメなら パイプ名の完全一致と 方向(このエンドはサーバー)を重点的に確認する、という順番が最短ルートになります。

権限トラブルを減らす小技:PuTTY を「常に管理者」で起動できるようにする

原因が権限で確定した場合、毎回右クリックして昇格するのは地味に面倒です。運用で使うなら、次のどちらかで「管理者 PuTTY」を標準化すると再発が減ります。

方法手順のイメージ向いているケース
ショートカットの互換性設定ショートカットのプロパティで「管理者としてこのプログラムを実行する」を有効特定の端末 PC から頻繁に接続する
PowerShell で昇格起動Start-Process putty.exe -Verb RunAs運用手順書に「昇格して起動」を明記したい

ただし、管理者での常用は最小限にし、必要なときだけ昇格する運用が理想です。特に共有 PC では、誤操作の影響範囲が大きくなるため注意してください。

「権限」以外で開けないときの補足:方向が逆だと PuTTY は接続先を作れない

もう一つ、現場で多いのが 方向の取り違えです。Hyper-V の COM ポート設定で「このエンドはクライアント」になっていると、Hyper-V は“どこかに存在するパイプへ接続しに行く側”になります。

この構成だと、ホスト側にパイプをサーバーとして作るアプリが必要ですが、PuTTY は基本的に「既存のパイプへ接続するクライアント」なので、噛み合わずに失敗しやすくなります。切り分けでは次の視点が有効です。

  • VM を起動してもパイプが見えない:Hyper-V がサーバーとして作っていない可能性が高い
  • パイプは見えるのに PuTTY だけ開けない:権限(ACL)や多重接続、パイプ名不一致を疑う

切り分けのおすすめ手順:最短で原因に辿り着く流れ

同じエラー文でも原因が複数あるため、闇雲に設定をいじるより「観測できる事実」から潰す方が早いです。おすすめの流れをまとめます。

順番やること分かること
最初VM を起動し、dir \\.\pipe\ でパイプ名を確認Hyper-V 側が「サーバーとして」パイプを作れているか
次PuTTY を管理者として実行して接続権限が原因かどうか(最頻出ポイント)
次パイプ名の完全一致、方向、VM の COM1 を再確認設定ミス(タイポや逆設定)を排除
最後接続はできるが表示がない場合、Nano 側の EMS 設定と再起動を確認“開けない” ではなく “何も出ない” 問題へ切り分け

よくある質問

PuTTY を管理者で起動しても同じエラーです。次に見るべきは?

まずは パイプが存在しているか(dir \\.\pipe\)と、Hyper-V の COM1 が 「このエンドはサーバー」になっているかを確認してください。パイプが見えないなら PuTTY の前に Hyper-V 側の作成に失敗しています。

接続はできたのに画面が真っ黒です。壊れている?

壊れているとは限りません。EMS が無効、ポート番号が違う、ボーレートが違う、再起動していない、などで「つながるけれど出力がない」ことがあります。まずは EMS 設定と速度(例:115200)を揃え、VM を再起動して起動ログの段階から確認してみてください。

なぜ名前付きパイプを使うの? 物理 COM ではダメ?

Hyper-V ホストに物理 COM ポートが無い環境が多く、またリモート管理でも「ローカルで完結する」手段が欲しいためです。名前付きパイプなら、ホスト上の端末ソフトだけでシリアルコンソールを再現でき、VM ごとに独立した接続口を作れます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次