- 安装 KVM(host)
- 安装 Windows(guest)
- 配置 Windows(guest)
- 安装 openssh-server(guest)
- [opt]配置 PowerShell
- [opt]配置 Vim
- [opt]配置 WinGet
- 配置端口转发(host)
- 开放对应端口(guest)
KVM installation
这部分不多做描述 主要就三点
- KVM 仅用于 Linux 且需要BIOS打开虚拟化设置
- 使用 KVM 原因可见此处
- KVM 可以直接通过发行版的包管理进行一键式安装(如Debian) 桌面版多装一个
virt-manage
进行图形化操作
Windows installation
镜像从 MSDN 或者 MSDN, I tell you/NEXT, I tell you 下一个最新的 Win10 镜像就好
或者试试AtlasOS 或者 Tiny10
Softwares for Windows
如果可以图形化远控就用远控软件好了 然后接下来跳到下一部分了
使用命令行的话
- SSH: 这个很重要就没什么好说的了
- PowerShell: 适当配置一下以增强使用体验
- Vim: 命令行总得有一个命令行编辑器吧
- WinGet: 网好的话可以用来下载 Vim 等工具
SSH
看官方教程就好 支持PowerShell操作 可以脚本化
Windows 的 sshd 进来默认是管理员的cmd 可以修改登陆Shell 查看此处
Windows openssh-client 的反向端口转发在处理非22端口时有问题 (WSL与Cygwin正常)
PowerShell
详细的 PowerShell 配置与体验优化见此处
Win10自带的 PowerShell 版本为 5.1 基本可用 一般是建议安装一个 PSReadline
模块来保证与 bash 相似的体验
1
2
3
4
5
| # 修改策略 保证能执行本地脚本 profile.ps1 <----> 与 .bashrc 作用类似
Set-ExecutionPolicy RemoteSigned
Install-Module -Name PSReadLine
# Install-Module -Name PSReadLine -Scope User
|
下面是 profile.ps1 文件的一些基础配置 主要是 Emacs 模式与 上下键查询历史
1
2
3
4
5
6
7
8
9
10
11
| # $HOME/Document/WindowsPowerShell/profile.ps1
Import-Module PSReadLine # Install-Module -Name PSReadLine
#------------------------------- Set Hot-keys BEGIN
Set-PSReadlineKeyHandler -Key Tab -Function Complete
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
Set-PSReadLineOption -EditMode Emacs
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
#------------------------------- Set Hot-keys END
|
Vim
Vim 可以从官网下 也可以通过 WinGet 下载
官网下载 手动安装后还需要配置环境变量 比较简单的方法就是在 profile.ps1 里面添加路径
比如安装的Vim9.1默认路径在 ${Env:ProgramFiles}/Vim/vim91
1
| $Env:Path += ";${Env:ProgramFiles}/Vim/vim91"
|
WinGet
老实说 国内一般环境下 winget source update
会因为网络原因中断 除非链路上配置了代理 不然没办法使用
一般配置一下手动更新就好了 更多设置点击此处
1
2
3
4
5
6
7
8
9
10
11
12
| $settingsContent = @'
{
"$schema": "https://aka.ms/winget-settings.schema.json",
"logging": {
"level": "verbose"
},
"source": {
"autoUpdateIntervalInMinutes": 0
},
}
'@
$settingsContent | Out-File (Join-Path $env:LOCALAPPDATA 'Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json') -Encoding ASCII
|
Port forwarding
这个问题是使用默认NAT网络导致的 可以通过改用bridge网络来解决
不改的话也可使用其他端口转发方法 反正 虚拟机NAT是可以正常访问主机的
只是看起来端口转发会更稳定快速一些
具体操作可以使用 libvirt 的hook方案
Firewall allow
最后一步就是在虚拟机中打开防火墙 放行所需端口
这条命令参考自 SSH 配置
1
| New-NetFirewallRule -Name '__storage_rule_name__' -DisplayName '__display_rule_name__' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort <Port> # port: 22 or 11451-11454
|
Access Test
1
2
3
| ssh __user__@GUEST_IP
curl GUEST_IP:GUEST_PORT/
|