在 Azure VM 啟用了 WSL,想用 SSH 直接連進 WSL,省去先 RDP 再開 Windows Terminal 的程序。

研究後發現並非難事,但有好幾個步驟便是了。(以下為 Windows 11 22H2 的實測)

第一步在 WSL 上啟用 SSH 伺服器,預設未安裝,故可用以下指令安裝、設定 sshd: (參考:WSL 2 Setup for SSH Remote Access by Tristan Wu)

# 安裝 sshd
sudo apt install openssh-server -y
# 設定 sshd_config
# 將 #PasswordAuthentication yes 前方 # 移除,啟用密碼登入
sudo nano /etc/ssh/sshd_config 
# 重啟 SSH 伺服器
sudo service ssh restart 

此時在本機應已可用 ssh localhost SSH 登入。接下來要將 127.0.0.1 22 Port 導向 Windows 對外 IP(本例為 10.0.0.5) 的 22 Port。

學到新東西,原來 Windows 內建 Port Forwarding 功能 - netsh interface portproxy,可監聽對外 IP 的 22 Port,將其 TCP 連線導向 127.0.0.1 的 22 Port。

設定好記得要將 Windows 內建防火牆打開,這裡選擇用 netsh CLI 指令完成,未來要在其他主機設定,複製貼上即可,比滑滑鼠快十倍。

設 Port Proxy 及開 Windows 防火牆指令如下:
註:Azure VM 這類具有 Internet 公開 IP 的主機,直接開放 22 Port 很危險,一晚上就能引來數百上千次試探,強烈建議要限定來源 IP。

# 將主機 IP 22 Port 導向 localhost 22 Port 
netsh interface portproxy add v4tov4 listenaddress=10.0.0.5 listenport=22 connectaddress=127.0.0.1 connectport=22
# 因另有防火牆,此處不限定 remoteip
netsh advfirewall firewall add rule name="Open SSH Port 22" dir=in action=allow protocol=TCP localport=22 remoteip=any

設定妥當後,就能直接從遠端 ssh <win-host> 連進 WSL囉。
註:還可建立金鑰加入 ~/.ssh/authorized_keys,之後改用金鑰登入,再省去被猜密碼的風險,會更安全。延伸閱讀:從 Windows 使用金鑰免密碼登入 SSH/SFTP/SCP


Comments

# by Hank

請問這樣做的用意是什麼 為何 VM 不直接使用 Linux

# by Jeffrey

to Hank, 這是少見的需求沒錯。狀況是在先開了 Windows VM 當開發環境,因為要測 Linux 相關程式所以啟用了 WSL,但偶爾會從地端連 WSL 測試,開 SSH 可省去先連進 RDP 的步驟。

Post a comment