我设置了一个 VPN,并且可以通过任何其他计算机通过 SSH 进入 Windows 上的 WSL2,方法是运行:
ssh microsoft_account_email@ipaddress
从另一台计算机的终端。我通过运行
sudo adduser -name
我尝试运行:
ssh username@ipaddress
但那行不通。我意识到,只有当我将我的微软电子邮件而不是实际的 WSL 用户名作为用户名时,我才能 ssh。
我如何才能 ssh 到选定的用户而不是 root?这个想法是让几个人能够 ssh 到 WSL 上的自己的帐户。
答案1
您将在文章中找到有关向公众公开 WSL1/2 SSH 的过程的详细信息
配置 WSL 1 和 WSL 2 的 SSH 访问。
我在这里仅展示我认为您所做工作中缺少的部分,这些部分可以在“WSL 2 特定步骤”部分中找到。本文假设 2022 为 SSH 的传入端口。
使用 PowerShell 创建防火墙规则以允许端口 2022 上的传入流量:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd) for WSL' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2022
将物理接口上的传入流量路由到 WSL 接口非常复杂,因为分配给 WSL 实例的 IP 会随时间而变化。要动态地实现这一点,需要
%USERPROFILE%\sshd.bat
按如下方式更新批处理脚本:
@echo off
setlocal
C:\Windows\System32\bash.exe -c "sudo /usr/sbin/service ssh start"
C:\Windows\System32\netsh.exe interface portproxy delete v4tov4 listenport=2022 listenaddress=0.0.0.0 protocol=tcp
for /f %%i in ('wsl hostname -I') do set IP=%%i
C:\Windows\System32\netsh.exe interface portproxy add v4tov4 listenport=2022 listenaddress=0.0.0.0 connectport=2022 connectaddress=%IP%
endlocal
完成后,您应该能够使用用户名而不是 Microsoft 帐户进行 SSH。
有关更多详细信息,请参阅链接的文章。
答案2
这个想法是让几个人能够通过 ssh 进入 WSL 上的他们自己的账户。
首先,请确保您完全了解此过程的安全隐患。WSL 中的每个用户都将以与您的视窗用户。默认情况下,他们将能够使用您的权限运行 Windows 应用程序(如 PowerShell 或 CMD)。他们将能够以您的 Windows 用户身份访问和修改文件(甚至一些加密文件)。
如果您同意的话——太好了。继续。
如果没有,你将不得不锁定 WSL 以限制对 Windows 的访问——如果这是可能的。请参阅这个答案了解一些细节,但要意识到即使这样可能还不够。
至于您的具体问题,这里可能发生以下几件事:
首先,如果您必须输入 Microsoft 帐户才能访问 SSH,则意味着您正在端口 22 上运行 Windows OpenSSH 服务器。该服务器不会知道 WSL 用户名。
从@harrymc 的回答的评论中,您提到
Permission denied (publickey).
在端口 2022 上为 SSH 配置 WSL 实例后您看到了什么。/etc/ssh/sshd_config
这可能是因为您使用的发行版默认禁用了密码验证。您可以通过sudo -e /etc/ssh/sshd_config
并注释掉 来更改此设置#PasswordAuthentication no
。