无法通过 SSH 远程登录 WSL 中的其他用户

无法通过 SSH 远程登录 WSL 中的其他用户

我设置了一个 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

相关内容