chroju.dev/blog

the world as code

$ vagrant sshで仮想マシンに入れなくなった場合の対処法

やらかしました。Rails環境構築シリーズ、次回でセキュリティ周りの設定をまとめようと思い、普段の要領でiptablesをいじったりsshのポート番号変えたりしてたんだけど、なんか設定しくじったっぽくてvagrant sshできなくなった。やべえ、仮想マシンだしこれもう詰んだんじゃねと思ったんだけど、なんとか元に戻せたので対処法まとめとく。

といっても簡単な話です。

  • Virtual BoxをGUIで開く
  • 該当仮想マシンがリストに入ってるので強制終了し、Virtual Box上で起動し直す
  • rootでログイン(パスワードはデフォルトでvagrant)
  • おかしい箇所を直す

コマンド叩いて操作してるので忘れがちだけど、vagrantはVirtual Box上(有料版ならVMware上も有り得るが)に仮想マシンを立ててるので、普通にGUIから入ればいい話です。rootで入ってぐいぐいヤバそうなとこ直して、直したらターミナルからssh試してみてってのを交互に繰り返して直しませう。

rootで入り直す前に一度VM落とす手順を入れましたが、こうしないとGUIから入れないみたいです。僕の場合だとターミナルでiptablesとかいじって、よしじゃあsshログインできるか試してみようってことで一旦ログアウトしたら入れなくなった(アホだ)のでVMが立ち上がりっぱなしになっちゃったわけなんだけど、この状態で取りあえずVirtual Box開いてみたらコンソールを表示するボタンがグレーアウトされてました。なので一旦強制終了するしかないです。

余談

ちなみに今回何をやらかしたのかだけど、ポイントとしてはsshのポート番号を変えた(/.ssh/configをいじった)のと、iptablesをいじったのの二点。これを普通のVMの感覚でやっちゃったのがマズかったみたい。

まず、vagrant sshで使われているポート番号はデフォルトで22ではなく、2222なのです。これはホスト側で$ vagrant ssh-configコマンドを打ってみるとわかる。

Host default
  Hostname 127.0.0.1
  User vagrant
  Port 2222

一方、ssh以外の各vagrantコマンドについても、いずれもsshを使っている模様。vagrant upもvagrant haltもssh経由で命令しているみたいです。ただ、こちらは通常通りPort 22を使っているのでややこしい。このあたりの事情を踏まえた上でポート番号あれこれしないと、必要なはずのポート塞いじゃってうああああああってなっちゃうっぽい。

まぁvagrantで作ったサーバーを表に公開することはあんまりないと思うんで、このへん触らないのが吉かも。練習でやりたいのであれば、vagrant以外でサーバー用意してやった方が良さそうな気がします。

参考