---
# System prepended metadata

title: 利用SSH連進Windows上利用Hyper-V架設的Linux Guest
tags: [' network', ' hyper-v', ' ssh', windows]

---

---
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)