--- tags: windows, hyper-v, network, ssh --- # 利用SSH連進Windows上利用Hyper-V架設的Linux Guest ## Preliminaries 大概有以下幾點需要注意: 1. Windows上分給Hyper-V guests使用的網路介面卡 沒有特殊考量的話,建立hyper-v guests時那個引導介面會問你是否要用網路卡,選default switch即可,你的live CD應該就能看到網路了 2. Linux機器的自動連線 應該沒人想要每次開機時都需要叫hyper-v那個醜不啦嘰的介面出來`dhclient`之類的吧 個人是使用[networkmanager](https://wiki.archlinux.org/index.php/NetworkManager),操作上覺得簡單些 3. Windows上的ssh client 看是要用[mobaxterm](https://mobaxterm.mobatek.net/)啦還是[putty](https://www.putty.org/)啦,甚至是[windows build-in ssh client](https://www.howtogeek.com/336775/how-to-enable-and-use-windows-10s-built-in-ssh-commands/),隨緣、隨喜 個人是使用[WSL2](https://docs.microsoft.com/en-us/windows/wsl/install-win10) 你問反正都是vm,為甚麼還要額外多個hyper-v的vm? 啊我就喜歡東西能簡單備份,玩壞不心疼(′・ω・‵) 目前儘管有[archlinux WSL2的解決方案](https://github.com/yuk7/ArchWSL)了,不過畢竟不是官方支援,毛少一點的使用arch的方式還是開vm 以下不會贅述關於`sshd_config`以及`ssh-keygen`之類的設定 ## 網路介面設定 其實我真的不是很懂網路… 雖然vm上裝上hyper-v default switch可以正常連到外網,我總是找不太到方式可以直接用該介面卡ssh進去; 新建另一張internal介面卡專門做為此用途。 1. 專用的網路介面卡`peko` 在hyper-v manager的virtual switch manager新增一個Internal virtual switch,並給定名字,這邊用`peko`表示。新增完之後應該會在控制台的網路介面管理發現一個新的virtual switch,名字有`peko`的 2. hyper-v vm設定 選擇要ssh進去的vm,右鍵settings、新增硬體、新增網路介面卡`peko` 3. windows下的網路介面卡(`peko`)設定 開啟控制台$\rightarrow$網路介面管理,找到`peko`的設定 在`peko`的IPv4設定給定一個固定ip、子網路遮罩,例如`192.168.1.0`以及`255.255.254.0` 4. hyper-v linux guest設定 最後一次開啟那個醜不啦嘰的hyper-v connect介面。 這時`ip link`之類的指令應該會看到至少有兩張網路介面卡,其中一張是原本的hyper-v default switch,`ip route`指令應該會發現正常的網路是從這個介面出去,而其中另一張應該是沒有任何route使用的,對應到剛才新增的`peko`這張網路卡 使用你喜歡的網管daemon給定這張卡*對應到方才windows下設定之IP以及子網路遮罩的**固定IP***,例如`192.168.1.69/23` 以`networkmanager`來說,開進vm時可能已經發現有多一個網路連線設定檔、只是還沒有網路連線而已,修改它就好: ``` bash nmcli con mod miko \ ipv4.address "192.168.1.69/23" \ ipv4.method "manual" \ # assuming "miko" is your profile name ``` 而後`nmcli con up miko`,如此應該就能從windows用ssh client連進來該hyper-v vm了,並且重開機之後應該也會自動連上 ## 小結 - Windows Hyper-V Host - Hyper-V Internal Switch with manually assigned IP/mask in Windows - Linux Hyper-V Guest VM - Static IP for the interface corresponding to the internal switch above ## References - [Unix & Linux Stack Exchange: Use Static IP](https://superuser.com/a/1567859/936873) - [`nmcli` Settings](https://askubuntu.com/questions/246077/how-to-setup-a-static-ip-for-network-manager-in-virtual-box-on-ubuntu-server)