配置 WSL
使用 ssh 远程 wsl
安装 ssh 服务
1
| apt install openssh-server
|
修改 sshd 服务启动配置文件
1
2
3
4
5
6
7
8
9
| vi /etc/ssh/sshd_config
# add
# 允许root用户登录
PermitRootLogin yes
# 服务端口,为了不和windows及其它wsl子系统冲突,手动指定一个
Port 12308
# 监听地址,如果需要远程机器连接
ListenAddress 0.0.0.0
|
启动
ubuntu
wsl
wsl 是无法用 systemctl
启动 ssh 的,因此,需要自己写脚本 vi /etc/init.d/sshd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| #!/bin/sh
# Start/stop/restart the secure shell server:
sshd_start() {
# Create host keys if needed.
if [ ! -r /etc/ssh/ssh_host_key ]; then
/usr/bin/ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ''
fi
if [ ! -f /etc/ssh/ssh_host_dsa_key ]; then
/usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
fi
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
/usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
fi
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
/usr/bin/ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key-N ''
fi
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
/usr/bin/ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key-N ''
fi
/usr/sbin/sshd -f /etc/ssh/sshd_config
}
sshd_stop() {
killall sshd
}
sshd_restart() {
if [ -r /var/run/sshd.pid ]; then
echo "WARNING: killing listener process only. To kill every sshd process, you must"
echo " use 'rc.sshd stop'. 'rc.sshd restart' kills only the parent sshd to"
echo " allow an admin logged in through sshd to use 'rc.sshd restart' without"
echo " being cut off. If sshd has been upgraded, new connections will now"
echo " use the new version, which should be a safe enough approach."
kill `cat /var/run/sshd.pid`
else
killall sshd
fi
sleep 1
sshd_start
}
case "$1" in
'start')
sshd_start
;;
'stop')
sshd_stop
;;
'restart')
sshd_restart
;;
*)
echo "usage $0 start|stop|restart"
esac
|
启动
查看
windows 下面 win+r
打开 cmd
,输 入 netstat -ano|findstr "12308"
查看端口,发现已经启动
到这个阶段,已经可以用本地 win 主机来 ssh 连接 wsl 了
1
| ssh <name>@<wsl ip> -p 12308
|
远程 ssh 连接
如果防火墙开启,那我们需要配置防火墙规则同时需要配置端口转发规则
配置端口转发规则
意思就是,访问到物理机的 2222 端口的请求,转发到 wsl 的 12308 端口,IP 为 wsl 的 ip
1
| netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=[IP] connectport=[PORT]
|
配置防火墙出入站规则
这是安全规则,如果防火墙关闭的话则不用配置,
1
| netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=2222
|
配置完以上两步后,我们则可以通过外网来访问我们的 wsl
(例如,本机 ip 是 1.2.3.4,wsl 地址是 172.16.12.1)
那么,远程访问时,通过
1
| ssh jack@1.2.3.4 -p 2222
|
即使所有的命令行都关闭,只要 wsl 不是 shutdown 状态,ssh 服务正常开启,那么就可以通过 ssh 进行连接
其实,通过这一步可以自由的配置本地端口与 wsl 端口的映射,也就是可以通过物理机来进行网站或应用程序的访问,比如,我们再 wsl 部署一个网站,我们可以直接将该网站的端口 xxxx 映射到物理机的 8080(举例),那么我们通过本机 ip:8080 即可访问该网站,大大提高我们的易操作性。
wsl “固定 IP” 配置
wsl 每次重启,ip 地址都会变化,也就是说通过以上步骤添加的映射规则再 wsl 重启后就失效了!
其实这种说法并不准确,因为严格意义上,固定 wsl ip 实现相当复杂,我们一般都是通过变相的操作来达到相同的目的。
这个方法就是,wsl 启动时,读取 ip 并将 ip 以及域名写入到 Windows 的 hosts 文件中,这样以来,我们映射规则中的 IP 就可以用域名来代替。
详见 https://zhuanlan.zhihu.com/p/372601715
转移 WSL 到其他盘
摘自:https://zhuanlan.zhihu.com/p/621873601
准备工作
打开 CMD,输入 wsl -l -v
查看 wsl 虚拟机的名称与状态。
了解到本机的 WSL 全称为 Ubuntu,以下的操作都将围绕这个来进行。
输入 wsl --shutdown
使其停止运行,再次使用 wsl -l -v
确保其处于 stopped 状态。
导出 / 恢复备份
在 D 盘创建一个目录用来存放新的 WSL,比如 D:\Ubuntu_WSL
。
导出备份(比如命名为 Ubuntu.tar)
1
| wsl --export Ubuntu D:\Ubuntu_WSL\Ubuntu.tar
|
确定在此目录下可以看见备份 Ubuntu.tar 文件之后,注销原有的 wsl
1
| wsl --unregister Ubuntu
|
将备份文件恢复到 D:\Ubuntu_WSL
中去
1
| wsl --import Ubuntu D:\Ubuntu_WSL D:\Ubuntu_WSL\Ubuntu.tar
|
这时候启动 WSL,发现好像已经恢复正常了,但是用户变成了 root,之前使用过的文件也看不见了。
恢复默认用户
在 CMD 中,输入 Linux发行版名称 config --default-user 原本用户名
例如:
1
| Ubuntu config --default-user melon
|
请注意,这里的发行版名称的版本号是纯数字,比如 Ubuntu-22.04 就是 Ubuntu2204。
这时候再次打开 WSL,你会发现一切都恢复正常了。