🫅

【Vagrantエラー】Vagrant(v2.4.1)on Windows11でもvagrant ssh できない問題の解決

2024/06/30に公開

TL;DR

Windowsにおいて、vagrant up の実行場所、.vagrant の作成場所は C:\Users\{あなたのユーザー名} 以下とするのが無難
C:\ などに作るとファイル権限周りで厄介なため。

現象

C:\code\vagrant\linuc-dhcpにて vagrant ssh を実行したが、sshセッションが開始できず、Permissin deniedとなる。

C:\code\vagrant\linuc-dhcp> vagrant -v    
Vagrant 2.4.1 # 2024-06-30時点のlatest

C:\code\vagrant\linuc-dhcp> vagrant ssh dhcp-client-2 # dhcp-client-2 はVMの名前。Vagrantfileで定義するマシンが1つのみの場合は省略できるものです。
vagrant@127.0.0.1: Permission denied (publickey). # 鍵の権限問題でエラーが。

調べたこと

ググる

(publickey) とあるので公開鍵の権限におけるエラーだろう。
ググってみると、GitHub上で似たようなイシューを発見したものの、v2.4.1では解決しているとクローズ済み。

https://github.com/hashicorp/vagrant/issues/13284

自身の環境もv2.4.1なので別の問題だろう。

--debug のログ

大変長いので要点のみ掲載。

> vagrant ssh --debug dhcp-client-2
...
DEBUG safe_exec: Converted - Command: `"C:\\WINDOWS\\System32\\OpenSSH\\/ssh.EXE"` Args: `["vagrant@127.0.0.1", "-p", "2201", "-o", "LogLevel=FATAL", ...,"-i", "C:/code/vagrant/linuc-dhcp/.vagrant/machines/dhcp-client-2/virtualbox/private_key"]`
vagrant@127.0.0.1: Permission denied (publickey).

以下のことが読み取れる。

  • System32のssh.exe を実行している。
  • sshの宛先はvagrant@127.0.0.1:2201 である。
  • ssh.exe の実行オプションとして以下を指定している
    • FATALレベルのログレベルを出力する
    • 認証のための鍵ファイルは C:/code/vagrant/linuc-dhcp/.vagrant/machines/dhcp-client-2/virtualbox/private_key を指定している。
      • これはvagrant up したフォルダに存在する.vagrantの中に入っている鍵ファイルである。

sshの実行ログ

素のsshを実行。--verbose で詳細情報を出さずともエラーログを出力してくれた。
おおかた「大事な鍵にUsersっていう余計なユーザーに権限が当てられててセキュリティ的によろしくない。権限剥がして。」というメッセージだと理解。

> ssh vagrant@127.0.0.1 -p 2201 -i .\.vagrant\machines\dhcp-client-2\virtualbox\private_key
Bad permissions. Try removing permissions for user: BUILTIN\\Users (...) on file C:/code/vagrant/linuc-dhcp/.vagrant/machines/dhcp-client-2/virtualbox/private_key.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '.\\.vagrant\\machines\\dhcp-client-2\\virtualbox\\private_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key ".\\.vagrant\\machines\\dhcp-client-2\\virtualbox\\private_key": bad permissions    
vagrant@127.0.0.1: Permission denied (publickey).

解決策

暫定策(プロパティからファイルの権限を変更)

  • 以下のユーザー権限を削除する。
    • Users
    • Authenticated Users
  • 以下のユーザー権限を追加する。
    • 自分(sshの実行ユーザー)

.vagrant\machines\dhcp-client-2\virtualbox\private_key のプロパティ> セキュリティ> 詳細設定 を開く。

  • 継承の無効化> 「継承されたアクセス許可を…」 をクリック。
  • プリンシパル「Users」を選択して削除 をクリック
  • プリンシパル「Authenticated Users」を選択して削除 をクリック
  • 追加> 「プリンシパルの選択」> 詳細設定> 検索> 「検索結果」に表示のプリンシパル一覧から自分(sshの実行ユーザー)を選択> OK をクリック

  • 「選択するオブジェクト名を入力してください」に自分が追加されていることを確認し、OK をクリック
  • 「プリンシパル」に自分が追加されていることを確認しOK をクリック

変更結果は以下の通り。

再実行。成功。

> vagrant ssh dhcp-client-2                                     
...
vagrant@dhcp-client-2:~$ 

恒久策(vagrantの実行フォルダをC:\Users\{自分のユーザー名}以下にする)

暫定策のような作業はスクラップ・ビルドが前提であるIaCベースのVagrantにはそぐわない。

改めて変更前の権限設定を確認する。

暫定策にて操作した権限はC:\ から継承しているものであることがわかる。これはC:\code\vagrantというユーザー管理下にないフォルダで操作していることに起因している。

C:\Users\{自分のユーザー名}にてvagrant up した場合の鍵ファイルの権限を見てみる。

ここであれば暫定作のような権限変更を行わなくともssh可能。

結論

Windowsにおいて、vagrant up の実行場所、.vagrant の作成場所は C:\Users{あなたのユーザー名} 以下とするのが無難

余談。

Cドラ直下にフォルダ作ってアレコレする行為は、Linuxでいうとルート直下に作ったディレクトリでコーディングしているようなものですね。個人PCだからといえどよろしくないですね。
Winはユーザー名に日本語名がついてしまうことがあり、そのパスをpwshで度々指定するのは色々苦しいです。
横着して浅めの階層で操作していたのが裏目に出ました。

そもそも普段はWSL2上でいじる事が多かった上、Windowsの権限周りのことを正直あまり知らなかったのでハマりました。

Discussion