天天看點

子系統linux ssh,如何在Windows的Linux子系統上配置SSH伺服器

安裝openssh

首先需要安裝openssh-server和openssh-client。

然後修改sshd-config配置

子系統linux ssh,如何在Windows的Linux子系統上配置SSH伺服器

這裡需要關注的就是這三行。

1UsePrivilegeSeparation no         #因為wsl沒有實作chroot

2PasswordAuthentication yes

3ListenAddress 0.0.0.0                 #這一項在我的發行版裡預設為注釋行。

其他的可以根據需求修改。

1ListenAddress 0.0.0.0                  # 要讓其他計算機能連接配接上需要加上這一行,或者把經常需要連接配接的計算機IP加入

2PermitRootLogin yes                   # 允許root使用者登入。

關閉Windows自帶的ssh

我原本還不知道的,查了資料才知道新版Windows自帶了ssh服務,不過怎麼使用還沒有了解。

可以使用powershell來檢視這個服務。

1PS C:\Users\user> Get-Service -Name ssh*

2Status   Name               DisplayName

3------   ----               -----------

4Stopped  SshBroker          SSH Server Broker

5Stopped  SshProxy           SSH Server Proxy

在服務控制台裡找到這兩個服務停掉就行了。

注意要先停掉sshproxy才可以關掉sshbroker。

子系統linux ssh,如何在Windows的Linux子系統上配置SSH伺服器

以調試方式啟動ssh

1/usr/sbin/sshd -d

-d表明是以調試方式啟動的服務,這種情況下,錯誤會顯示在控制台上。

要注意即使以這種方法啟動ssh server,它仍然隻是在存在bash視窗時的一個子服務。一旦最後一個bash視窗關閉,這個ssh server也就關閉了,顯然這不是我們想要的。接下來看看怎麼将ssh server以windows服務或者背景程序來運作。

正常開啟ssh

1service ssh start

自動啟動ssh服務

目前WSL并不支援ssh server作為服務運作。我們需要借助windows計劃任務和腳本,使得在windows啟動時自動運作這一服務。

1set ws=wscript.createobject("wscript.shell")

2ws.run "C:\Windows\System32\bash.exe -c '/usr/sbin/sshd -D'",0

将這個檔案存為vbs,并在計劃任務中添加一個啟動任務,觸發器設定為系統啟動時。

不過使用這個方法的前提是你的WSL預設使用者是root,對于預設使用者不是root的必須使用sudo方式啟動。

執行sudo時,會提示輸入密碼,而這時又無法拿到使用者的輸入。要解決這一問題,需要允許sudo在沒有密碼的情況下執行指令。

在bash裡輸入指令:

1sudo visudo

1#includedir /etc/sudoers.d

2username ALL=(ALL) NOPASSWD: /usr/sbin/sshd -D

把username改成你自己的使用者名即可。