【Vagrantエラー】Vagrant(v2.4.1)on Windows11でもvagrant ssh できない問題の解決
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では解決しているとクローズ済み。
自身の環境も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:~$
C:\Users\{自分のユーザー名}
以下にする)
恒久策(vagrantの実行フォルダを暫定策のような作業はスクラップ・ビルドが前提である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