Some of the most devastating things that happen to you will teach you the most.
有些最打擊你的事情反而教會你的東西越多。
重裝原有SSH
sudo apt remove openssh-server
sudo apt install openssh-server
先解釋一下WSL的網絡,作為子系統的Ubuntu Linux和Windows主系統的IP是一樣的。如果在Linux上搭建了Nginx服務器,那么在Windows上的瀏覽器上輸入localhost是可以訪問Nginx服務的。如果在Linux上運行netstat -nlp是不會看到任何端口服務的。在Linux上啟用端口服務的時候,Windows系統會彈出窗口,詢問是否允許相關端口訪問。
WSL上的Ubuntu默認安裝了openssh-server,也就是ssh服務的軟件。但是,這個軟件的配置是不完整的,如果啟用服務,會報缺失幾個密鑰文件。為了解決這個問題,我們需要重新安裝openssh-server:
重新安裝完還不行,因為WSL上的Ubuntu的SSH服務配置默認不允許密碼方式登錄,我們需要改配置:
更改配置文件
sudo vim /etc/ssh/sshd_config
將以下配置復制到sshd_config配置文件
Port 2222 #設置ssh的端口號, 由於22在windows中有別的用處, 盡量不修改系統的端口號
PermitRootLogin yes # 可以root遠程登錄
PasswordAuthentication yes # 允許密碼驗證登錄
AllowUsers sky # 遠程登錄時的用戶名
重啟sshd服務
sudo service ssh --full-restart
此時,我們可以在Ubuntu的Bash下連接自己測試,也可以用Windows的PowerShell連接Ubuntu來測試,命令都是一樣的
測試連接
ssh username@localhost:2222 # username為安裝WSL Ubuntu時輸入的用戶名
如果要在其它機器上訪問,需要查找本機IP,把localhost換成IP,那么同一子網(wifi、路由器)下的機器也可訪問Ubuntu里的服務。
如果在其他機器上連接不成功看是不是Win10本地防火牆的2222端口沒有放行,放行端口方法
防火牆->高級設置->入站規則->新建規則
端口->下一步
選擇tcp 特定本地端口 2222
允許連接, 默認都選上, 下一步填個名字 完成
不出意外,就應該能連接成功了
順便提一下,如果是搭建Nginx服務就比SSH簡單多了,執行下面命令安裝后在瀏覽器訪問localhost即可:
sudo apt install nginx
sudo service nginx start
