我安装了Windows 10周年纪念版,并且正在安装“ Windows上的Ubuntu上的Bash”。我希望能够通过SSH进入这个Ubuntu实例,但是尽管我已经安装并配置了openssh-server(并监听端口2200),但是当我尝试ssh到“ localhost:2200”时,它告诉我“服务器意外封闭的网络连接”。

有人能成功完成此操作吗?



评论

使用Process Hacker并查看“网络”选项卡,它显示sshd(在Windows 10的Ubuntu上运行)正在侦听2200本地端口。

如果您尝试连接到系统的IP地址? Ubuntu通常与Windows映射映射回环地址不同,并在127.0.0.0/8(通常为127.0.1.1)中使用其他值

#1 楼

我让它工作了;

卸载ssh-server,重新安装并确保它以

sudo service ssh --full-restart


开始,确保关闭了root访问并添加了配置文件中的另一个用户。

我能够按预期连接到127.0.0.1:22上的子系统。
希望对您有所帮助。




sudo apt-get purge openssh-server
sudo apt-get install openssh-server

sudo nano /etc/ssh/sshd_config并禁止root设置PermitRootLogin no登录


,然后在其下方添加一行:

AllowUsers yourusername

,并确保将PasswordAuthentication设置为yes

通过添加/修改禁用特权分离:UsePrivilegeSeparation no
sudo service ssh --full-restart
使用PuTTY之类的ssh客户端从Windows连接到Linux子系统。 br />

评论


我不必这样做-很奇怪..但是请记住,它仍处于beta阶段,因此结果可能会有所不同

–阿扎尔大师
16年8月17日在21:26

此外,我还必须:从服务控制面板停止/禁用Windows 10 SSH Server Broker Services,并在sshdconfig中设置:PubkeyAuthentication no

– math0ne
16 Sep 16'3:49



我还需要添加防火墙规则。有一个现有规则,但这仅适用于Windows SSH服务器代理,当我停止该服务时,防火墙阻止了端口22上的通信。

– Pierre-Luc Paour
16-9-29在8:54

我还必须更改端口(/ etc / ssh / sshd_config文件中的端口2222),如果不是Windows的ssh服务器在端口22上建立了连接。

–香精
17年1月13日在2:12

@ArtemRussakovskii他们在关闭bash窗口时会停止整个Linux子系统...

– Sakher
17年7月20日在22:16

#2 楼

上面的答案很接近,但是我仍然遇到Connection closed by 127.0.0.1问题。

因此,从头开始并在删除--purge软件包时提供了sshd选项(如下文所示),解决了我对此问题的解决方法:

user$ sudo apt-get remove --purge openssh-server # First remove sshd with --purge option.
user$ sudo apt-get install openssh-server
user$ sudo vi /etc/ssh/sshd_config # **See note below.
user$ sudo service ssh --full-restart

# ** Change Port from 22 to 2222. (Just in case MS-Windows is using port 22).
#    Alternatively, you can disable MS-Windows' native SSH service if you 
#    wish to use port 22.


我希望这会有所帮助。 \(◠﹏◠)/

评论


为什么要下票?如上所述,仅这些说明对我而言不起作用,并且上面的其他步骤也有效。我不明白

– NYCeyes
17年5月16日下午4:54

我遇到了一个非常不同的错误“没有可用的受支持的身份验证方法(服务器发送:公共密钥)”,这些步骤已将其修复。

– Mike Viens
17年9月2日在11:52

出于某种原因,Windows只是不欣赏我在Port 2222上运行。它从未显示过使用它的其他进程,也没有端口冲突的迹象,但是当我更改端口后,它开始工作。

–forresthopkinsa
18年1月11日在2:16

端口2222对我也不起作用,没有其他服务在运行,但是22有效,这是个问题,因为我想拥有多个SSH连接。

– mFeinstein
19年8月27日在22:52

只是一个简单的删除,然后安装对我有用。

–百吉飞龙
20 Mar 20 '20在11:15

#3 楼

由于Windows实现不提供chroot,因此您需要修改/ etc / ssh / sshd_config

UsePrivilegeSeparation no


,此外,您还需要使用useradd命令创建一个用户。

评论


这一步对于使其工作至关重要。

–米克
16年8月17日在20:27

我很好奇,所以我在freebsd.org/cgi/man.cgi?sshd_config(5)中找到了它:UsePrivilegeSeparation:

–krs013
16年9月1日在7:46

指定sshd(8)是否通过创建未特权的子进程来处理传入的网络流量来分离特权。成功通过身份验证后,将创建另一个具有身份验证用户特权的进程。特权分离的目的是通过在非特权进程中包含任何损坏来防止特权升级。参数必须为“是”,“否”或“沙盒”。如果UsePrivilegeSeparation设置为“ sandbox”,则预身份验证非特权过程将受到其他限制。默认值为“沙箱”。

–krs013
16年9月1日在7:46

WSL在2016年9月实施了chroot(在此答案之后)。

–GreenReaper
17年4月28日在8:21

#4 楼

我按照Azazel大师的建议做了所有事情,并遇到了问题。当我连接到端口22时,系统要求我输入密码,但是在Linux子系统中设置的密码无效。

解决方案1:
更改/etc/ssh/sshd_config中的SSH端口并重新启动子系统中的SSH服务器

解决方案2:
禁用/停止Windows服务控制面板中的“ SSH服务器代理服务”,然后在子系统中重新启动SSH服务器。

评论


仅当您在端口22的Windows上运行某些程序时才适用。

–阿扎尔大师
16 Dec 4'在10:14

Ofcz,正如您在默认安装的win10上看到的那样,有一项服务正在22上运行...

–scotty86
16 Dec 5'在11:47

#5 楼

从服务器的日志记录中显示了无法SSH的原因:




Linux子系统似乎未实现chroot,而ssh服务器需要它,因此不允许连接。

评论


哪个是正确的..但是其他答案说明了如何解决chroot要求。

–马哈茂德·古德西(Mahmoud Al-Qudsi)
16年12月12日在20:46