題 如何通過SSH進入“Windows 10上的Ubuntu上的Bash”?


我安裝了Windows 10週年紀念版,並在Windows上安裝了“Bash on Ubuntu”。我希望能夠SSH到這個Ubuntu實例,但是雖然我已經安裝並配置了openssh-server(並在端口2200上偵聽),但當我嘗試ssh到“localhost:2200”時,它告訴我“服務器意外”封閉的網絡連接“。

有沒有人能夠成功實現這一目標?

enter image description here


86
2017-08-09 14:52


起源


使用Process Hacker並查看“網絡”選項卡,它顯示sshd(在Windows 10上的Ubuntu上運行)正在偵聽2200本地端口。 - Mick
如果你嘗試連接到系統的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


答案:


我得到了它的工作;這是如何做。

卸載ssh-server,重新安裝它並確保它已啟動

sudo service ssh --full-restart

確保關閉了root訪問權限並在配置文件中添加了另一個用戶。

我能按預期連接到127.0.0.1:22上的子系統。 我希望這能幫到您。

Here's a screenshot.

  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子系統。


100
2017-08-16 14:02



我沒有那麼做 - 奇怪..但請記住,這仍處於測試階段,所以結果可能會有所不同 - Master Azazel
此外,我不得不:從服務控制面板停止/禁用Windows 10 SSH服務器代理服務,並在sshdconfig中設置:PubkeyAuthentication no - math0ne
我還需要添加防火牆規則。有一個現有的規則,但僅適用於Windows SSH服務器代理,當我停止該服務時,防火牆阻止了端口22上的流量。 - Pierre-Luc Paour
我也不得不換口(Port 2222 在 /etc/ssh/sshd_config 文件),如果不是Windows的ssh服務器在端口22上獲取連接。 - arod
@ArtemRussakovskii他們在關閉bash窗口時停止整個Linux子系統... - Sakher


由於Windows實現不提供chroot,您需要修改/ etc / ssh / sshd_config

UsePrivilegeSeparation no

您還需要使用useradd命令創建用戶。


24
2017-08-09 20:45



這一步對於它的運作至關重要。 - Mick
我很好奇,所以我發現了這個 freebsd.org/cgi/man.cgi?sshd_config(5):UsePrivilegeSeparation: - krs013
指定sshd(8)是否通過創建非特權子進程來處理傳入網絡流量來分離權限。身份驗證成功後,將創建另一個具有經過身份驗證的用戶權限的進程。特權分離的目標是通過在非特權進程中包含任何損壞來防止特權升級。參數必須是“是”,“否”或“沙盒”。如果UsePrivilegeSeparation設置為“sandbox”,則預身份驗證非特權進程受到其他限制。默認為“沙盒”。 - krs013
WSL於2016年9月實施了chroot (在這個答案之後)。 - GreenReaper


上面的委員會答案很棒。謝謝你。雖然他們非常接近,但我仍然有 連接由127.0.0.1關閉 問題。

我發現並添加了其他步驟 這個帖子 讓我超越了駝峰。特別是,重新開始並將其添加為初始/第一步(請注意 - 清除 限定詞),最後解決了我對這個問題的變異:

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

再次感謝,我希望這一補充能夠幫助他人。 = :)


17
2018-05-16 02:58



為什麼選擇downvote?如上所述,這些說明本身並不適用於我的情況,並且上述額外步驟也起作用。我不明白。 - prismalytics.io
我有一個非常不同的錯誤“沒有可用的支持的身份驗證方法(服務器發送:publickey)”,這些步驟修復了它。 - Mike Viens
出於某種原因,Windows只是沒有意識到我在端口2222上運行。它沒有顯示使用它的任何其他進程,並且沒有端口衝突的證據,但是一旦我更改端口,它開始工作。 - forresthopkinsa


我按照Azazel大師的建議完成了所有事情並解決了問題。當我連接到端口 22 我被要求輸入密碼,但我在Linux子系統中設置的密碼不起作用。

解決方案#1:
更改SSH端口 /etc/ssh/sshd_config 並重新啟動子系統中的SSH服務器

解決方案#2:
禁用/停止Windows服務控制面板中的“SSH服務器代理服務”,並重新啟動子系統中的SSH服務器。


5
2017-11-17 09:57



這僅適用於端口22上的窗口上運行的某些內容。 - Master Azazel
Ofcz,正如你在我的默認安裝win10上看到的,有一個服務運行在22 ... - scotty86


您無法ssh到它的原因顯示在服務器的日誌記錄中:

chroot(“/ var / run / sshd”):函數未實現[preauth]

Linux子系統似乎沒有實現chroot,ssh服務器需要它,因此不允許連接。


2
2017-08-09 16:46



這是正確的..但其他答案解釋瞭如何解決chroot要求。 - Mahmoud Al-Qudsi