如何通过SSH进入“ Windows 10上的Ubuntu上的Bash”?


99

我安装了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)中使用其他值
Frank Thomas

@Ramhound:不是。Localhost是localhost,并且所有内容都是共享的。您可以links http://localhost/从Linux子系统中完美地完成操作,并在Windows端看到IIS提供的网页。没有分离。
Sami Kuhmonen

Answers:


120

我让它工作了;这是如何做。

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

sudo service ssh --full-restart

确保关闭了root用户访问权限,并在配置文件中添加了另一个用户。

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

这是屏幕截图。

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config 并通过设置禁止root登录 PermitRootLogin no
  4. 然后在其下方添加一行,内容为:

    AllowUsers yourusername

    并确保PasswordAuthentication将其设置为yes是否要使用密码登录。

  5. 通过添加/修改来禁用特权分离: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. 使用PuTTY之类的ssh客户端从Windows连接到Linux子系统。


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

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

6
我还需要添加防火墙规则。有一个现有的规则,但这只是针对Windows SSH服务器代理,当我停止该服务,防火墙阻塞了交通上的端口22
皮埃尔-吕克·Paour

2
我也不得不改变端口(Port 2222/etc/ssh/sshd_config文件),如果没有窗户的SSH服务器上拿起22端口的连接
AROD

2
@ArtemRussakovskii,只要您关闭bash窗口,它们就会停止整个Linux子系统……
Sakher

27

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

UsePrivilegeSeparation no

另外,您将需要使用useradd命令左右创建一个用户。


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

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

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


24

上面的委员会回答很好。谢谢他们 尽管它们非常接近,但我仍然因127.0.0.1问题关闭Connection

我从这篇文章中找到并添加了其他步骤,使我不为所动。特别是,从头开始并将其添加为第一步/第一步(请注意--purge限定符),最终解决了我对此问题的解决方案:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

再次感谢,我希望这种补充对其他人有帮助。= :)


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

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

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

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

4

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

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

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


1
如果你有什么端口22上运行在Windows这仅适用
硕士阿撒兹勒

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

2

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

chroot(“ / var / run / sshd”):未实现的功能[preauth]

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


3
哪个是正确的..但是其他答案说明了如何解决chroot要求。
马哈茂德·古德西
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.