1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsのHyper-VにUbuntu乗せてVSCodeだけでなんとかしたい

Posted at

Hyper-VとUbuntuとVSCode

Hyper-Vの有効化

  • 左下のWindowsマーク
  • 設定
  • システム
  • オプション機能
  • Windowsのその他の機能
  • Hyper-V に ☑
  • OK

Ubuntuのインストールイメージをダウンロード

公式からダウンロード

https://jp.ubuntu.com/download

今回は 24.04.01 LTS
(開発に使うなら長期安定板のLTSのほうがいいと思う)

VMの作成

VMそのものの作成

  • 左下のWindowsマーク
  • 検索窓っぽいところに Hyper-V マネージャー と入力
  • Hyper-V マネージャーを起動
  • 画面右ペインの上のほうにある「操作」
  • 新規
  • 仮想マシン
    • 開始する前に
      • 次へ
    • 名前と場所の指定
      • なんか適当に名前を付ける
      • 次へ
    • 世代の指定
      • 第2世代
      • 次へ
    • メモリの割り当て
    • ネットワークの構成
      • 接続 : 接続しない
        • 後で構成するのでここではつながない
      • 次へ
    • 仮想ハードディスクの接続
    • インストールオプション
      • 後でオペレーティングシステムをインストールする
      • 次へ
    • 構成の確認
      • 完了

NATの構築

開発用のマシンだからVMから外へはアクセスしたいんだけど外からVMに自由に入られたら困るんだよなー、という感じなのでNATを構成
手順が複雑なので公式を参照

https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/setup-nat-network

仮想スイッチ「puipui」を作る

New-VMSwitch -SwitchName "puipui" -SwitchType Internal

puipuiを探す

Get-NetAdapter

puipui(のデフォルトゲートウェイ)に固定IPを割り当てる

New-NetIPAddress -IPAddress 192.168.32.1 -PrefixLength 24 -InterfaceIndex (puipuiのifIndex)

NATを構成する

New-NetNat -Name puipuiNAT -InternalIPInterfaceAddressPrefix 192.168.32.0/24

設定したアドレスレンジ(192.168.32.0/24)はOSインストール時に使うのでどっかに記録しておく

※ NATはあくまでネットワークを区切ってるだけでセキュリティ機構では無いので母機に侵入されるとVMにも入られる
(が、母機が開発機なのでここに入られたらどっちにせよ終わりという思想で進める)

VMの設定変更

  • Hyper-Vマネージャーに戻る
  • 作成したVMを選択
  • 右ペインの下のほうにある「設定」
    • セキュリティ
      • セキュアブート
        • Microsoft UEFI 証明書
      • 適用
    • SCSIコントローラー
      • DVDドライブ
        • 追加
      • イメージファイル
        • ダウンロードしたUbuntuのISOイメージ
      • 適用
    • ネットワークアダプター
      • さっき作ったNATアダプタ
    • 適用
    • 一回上のほうにある ファームウェア に戻る
      • ブート順
        • DVDドライブを一番上に
    • 適用

Ubuntuのインストール

Hyper-Vマネージャーで作成したVMに「接続」して「起動」する

  • Try or Install Ubuntu Server
  • Language
    • English
  • Keyboard
    • Layout
      • Japanese
    • Variant
      • Japanese
  • Type of Install
    • Ubuntu Server
  • Network
    • eth0 eth -
      • Edit IPv4
        • IPv4 Method : Manual
          • Subnet
            • 192.168.32.0/24
          • Address
            • 192.168.32.32
          • Gateway
            • 192.168.32.1
          • Name Server
            • (ISP指定のDNSとか会社指定のDNSとか)
          • Save
  • Proxy
    • (繋いでるネットワークで指定がある場合とかは設定する、そうでない場合は空欄で)
  • Ubuntu Archive mirror
    • (裏でなんかやってるので終わるまでちょっと待ってあげる)
  • Install update available
    • (新しいのあるよ!って言ってくるけど後でアップデートかけるからここではパス)
    • Continue without upgrading
  • Storage configration
    • (必要がなければ特に変更なしで)
    • (次の画面も確認だけなので変更なしで)
  • Profile configration
    • Your name
      • (名前、らしい。何に使うのかはよくわからないが)
    • Your server name
      • サーバーのホスト名
    • username
      • ユーザーID
    • password
      • パスワード
    • confirm
      • もう一回パスワード
  • Ubuntu Pro
    • 有償サポートライセンスの有無だと思う
    • 持ってなければSkip nowで
  • SSH
    • [X] Install OpenSSH server
  • Feature
    • もし入れたいのがあればここで入れといてもOK
      • 後で入れれるから焦らなくて大丈夫
  • reboot now
  • [FAILED] Failed unmounting cdrom.mount - /cdrom.
    • 赤文字で出てくるけど慌てずにエンターキーを押す
  • login:
    • 初回起動時にSSH関連の表示がかぶってることがあるけどその場合は一回エンターキーを押す
  • Password
  • シャットダウンする
sudo poweroff

VMからDVDドライブを外す

  • Hyper-Vマネージャーに戻る
  • VMの設定を開く
  • SCSIコントローラーの下にあるDVDドライブを選択
    • 削除
    • 適用

VMを起動する

  • Hyper-VマネージャーからVMを起動
    • ここからは「接続」を使わなくてOK

Ubuntuの設定

VSCodeの準備

  • VSCodeをまだインストールしてない人はここでインストール
  • VSCodeを開いて左ペインのブロックが4つ組み合わさったみたいなアイコンを選択
  • 検索窓に remote development と入力
    • 提供元がMicrosoftになっているものをインストール

VSCodeでVMに接続

  • 左下の青い >< みたいなアイコンをクリック
  • ホストに接続する... Remote-SSH
    • +新規SSHホストを追加する
      • (ユーザーID)@(VMのIPアドレス)
    • 構成するSSHファイルを選択する
      • いくつか出てくるけど好きなのを選ぶ
    • 設定が保存されて元の画面に戻る
  • ホストに接続する... Remote-SSH
    • VMのIPアドレスが出てくるはずなのでそれを選ぶ
    • 新しいVSCodeが立ち上がってくる
    • Select Platform
      • Linux
    • フィンガープリント
      • 続行
    • パスワード
      • パスワードを入力
  • 接続に成功したら >< が >< SSH:192.168.32.32 のような感じに変わる

VSCode側の準備

  • VSCodeでVMに接続した状態でVSCodeの左側のファイルのアイコンを選択
    • フォルダーを開く
      • /home/(ユーザーID)
      • OSの種類
        • Linux
      • パスワード
        • パスワードを入力
      • このフォルダー内のファイルの作成者を信頼しますか?
        • はい
  • ターミナルを開く
    • VSCodeのメニュー
      • 表示
        • ターミナル

Ubuntuのアップデート

VSCodeの画面下側にターミナルが開いているはずなのでそこで入力する

sudo apt update
sudo apt upgrade

ほっとくとそのうちアップデートが終わるので気長に待つ

SSH Keyの作成

ssh-keygenでSSH Keyペアを作成します

ssh-keygen -t ed25519

色々聞かれるけどデフォルトのままでいいです

Enter file in which to save the key (/home/(user_id)/.ssh/id_ed25519): <- そのままエンター 
Enter passphrase (empty for no passphrase): <- ここもそのままエンター
Enter same passphrase again: <- ふたたびエンター

SSH秘密鍵のダウンロード

  • 左のファイルエクスプローラーから.sshを開く
  • id_ed25519を右クリック
    • ダウンロード
      • たぶんデフォルトではWindowsにログインしているユーザーのユーザーディレクトリが開いているはず
      • 違ったら頑張ってホームディレクトリに行く
        • C:\Users(ユーザー名) とかのはず
    • .sshフォルダを開く
    • わかりやすいファイル名を付けて保存する
      • e.g.) id_ed25519_VM

SSH公開鍵をVM側で登録

以下ターミナルで

cd ~/.ssh
cat id_ed25519.pub >> authorized_keys

VM側のSSH公開鍵認証を有効にする

sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf

たぶんデフォルトではこんな感じ

PasswordAuthentication yes

設定追加後

PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2

書き込み終わったらCtrl-O, エンター, Ctrl-Xの順で上書き保存

sudo systemctl reload sshd

ここまで進んだら一回SSH接続を切っておく

  • 画面右下の>< SSH:192.168.32.32みたいなのをクリック
  • 一番下にあるSSHを切断

VSCode側に秘密鍵を登録する

  • 左下の青い >< みたいなアイコンをクリック

  • ホストに接続する... Remote-SSH

    • SSHホストを構成する
      • 初めに設定した構成ファイルを選ぶ
  • こんな感じになってるはず

Host 192.168.32.32
  HostName 192.168.32.32
  User poteto
  • 設定を追加
Host c
  HostName 192.168.32.32
  User poteto
  PreferredAuthentications publickey
  IdentityFile C:\Users\potet\.ssh\id_ed25519_VM
  • 左下の青い >< みたいなアイコンをクリック
  • ホストに接続する... Remote-SSH
    • 構成したホストを選択して接続
    • パスワードを聞かれずにログイン出来たら完成
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?