有一台 windows11 的机器,安装了 WSL2 ,我想在其他机器通过 SSH 进行访问。目前的情况是可以通过 SSH 登录上,但是打开的终端是“CMD”。
根据一些教程,我通过修改注册表的方式将 SSH 的默认终端修改为了“Bash”,但是这样就会出现“系统无法访问此文件。”的报错。我还尝试了将注册表的终端值修改为“WSL”,即“C:\WINDOWS\System32\wsl.exe”,也会出现同样错误。但是很奇怪,我将默认终端设置为“Powershell”就没有任何问题,即"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"。
然后我又尝试了另一种方案,即先通过 SSH 登陆到 windows 的“CMD”终端,然后再在这里输入“Bash”命令或"wsl",均出现同样的错误,但是如果我在 windows11 本地打开“CMD”终端,“Bash”和“wsl”命令均可以正常使用。
用于连接的客户端是 macos 下的 iterm2 ,不过这个应该没有影响吧
我推测是不是远程连接的时候不允许访问“C:\WINDOWS\System32\”下的文件?但是“Powershell”同样在 System32 目录下,却可以正常访问,不太理解这个机制,有没有什么解决方案能够正常通过 SSH 打开“bash”或者“wsl”呢?
1
baobao1270 2022-10-11 08:36:16 +08:00
试试不在 windows 里启用 ssh server ,而是在 wsl 里安装 openssh server ?
|
2
xygod 2022-10-11 09:04:02 +08:00
感觉需要做端口转发,类似远程 ssh 到 docker 内?
|
3
MasterCai OP @baobao1270 wsl ip 不固定呀,就是想先试试通过 windows 连接的方案
|
5
xygod 2022-10-11 09:10:14 +08:00 1
|
6
ddrobot 2022-10-11 10:14:35 +08:00 1
@MasterCai 我之前用的 wsl2host ,后来要跨局域网通信,直接在 wsl 里跑 zerotier 或者 tailscle 之类的 p2p 打洞来组网了,再回来直接上 hyper-v 了,本质就是个虚拟机
|
7
canbingzt 2022-10-11 14:00:36 +08:00 1
$wslip = wsl -- ip -o -4 -json addr list eth0 `
| ConvertFrom-Json ` | %{ $_.addr_info.local } ` | ?{ $_ } netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=$wslip |
9
Evsio0n 2023-03-27 16:51:59 +08:00
This is a common issue for wsl2.
Known Issues: Launching Windows Subsystem for Linux from session zero does not currently work (for example from an ssh connection). https://learn.microsoft.com/en-us/windows/wsl/store-release-notes#known-issues 解決方法: 使用 wsl 1 |