如何使用安全殼層 (SSH) 連線並登入執行 Windows 的 Azure 虛擬機器
本文內容
適用於: ✔️ Windows VM ✔️ 彈性擴展集
Win32 OpenSSH 專案透過在 Windows 中提供原生支援,在各個地方使用安全殼層進行遠端連線。 此功能是由 Windows Server 2019 和更新版本所提供,而且可使用虛擬機器 (VM) 延伸模組新增至舊版 Windows。
下列範例會使用變數。 您可以在環境中設定變數,如下所示。
Shell
範例
Bash/ZSH
myResourceGroup='resGroup10'
PowerShell
$myResourceGroup='resGroup10'
啟用 SSH
首先,您必須在 Windows 機器中啟用 SSH。
部署適用於 Windows 的 SSH 延伸模組。 此延伸模組可自動化安裝 Win32 OpenSSH 解決方案,類似於在較新版本的 Windows 中啟用該功能。 使用下列範例來部署延伸模組。
az vm extension set --resource-group $myResourceGroup --vm-name $myVM --name WindowsOpenSSH --publisher Microsoft.Azure.OpenSSH --version 3.0
Set-AzVMExtension -ResourceGroupName $myResourceGroup -VMName $myVM -Name 'OpenSSH' -Publisher 'Microsoft.Azure.OpenSSH' -Type 'WindowsOpenSSH' -TypeHandlerVersion '3.0'
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(parameters('VMName'), '/WindowsOpenSSH')]",
"apiVersion": "2020-12-01",
"location": "[parameters('location')]",
"properties": {
"publisher": "Microsoft.Azure.OpenSSH",
"type": "WindowsOpenSSH",
"typeHandlerVersion": "3.0"
}
}
resource windowsOpenSSHExtension 'Microsoft.Compute/virtualMachines/extensions@2020-12-01' = {
parent: virtualMachine
name: 'WindowsOpenSSH'
location: resourceGroup().location
properties: {
publisher: 'Microsoft.Azure.OpenSSH'
type: 'WindowsOpenSSH'
typeHandlerVersion: '3.0'
}
}
開啟 TCP 通訊埠
確保開啟適當的連接埠 (預設為 TCP 22) 以允許連線到 VM。
az network nsg rule create -g $myResourceGroup --nsg-name $myNSG -n allow-SSH --priority 1000 --source-address-prefixes 208.130.28.4/32 --destination-port-ranges 22 --protocol TCP
Get-AzNetworkSecurityGroup -Name $MyNSG -ResourceGroupName $myResourceGroup | Add-AzNetworkSecurityRuleConfig -Name allow-SSH -access Allow -Direction Inbound -Priority 1000 -SourceAddressPrefix 208.130.28.4/32 -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange 22 -Protocol TCP | Set-AzNetworkSecurityGroup
{
"type": "Microsoft.Network/networkSecurityGroups/securityRules",
"apiVersion": "2021-08-01",
"name": "allow-SSH",
"properties": {
"access": "Allow",
"destinationAddressPrefix": "*",
"destinationPortRange": "22",
"direction": "Inbound",
"priority": "1000",
"protocol": "TCP",
"sourceAddressPrefix": "208.130.28.4/32",
"sourcePortRange": "*"
}
}
resource allowSSH 'Microsoft.Network/networkSecurityGroups/securityRules@2021-08-01' = {
name: 'allowSSH'
parent: MyNSGSymbolicName
properties: {
access: 'Allow'
destinationAddressPrefix: '*'
destinationPortRange: 'string'
destinationPortRanges: [
'22'
]
direction: 'Inbound'
priority: 1000
protocol: 'TCP'
sourceAddressPrefix: '208.130.28.4/32'
sourcePortRange: '*'
}
}
您的 VM 必須有公用 IP 位址。 若要檢查您的 VM 是否有公用 IP 位址 ,請從左側功能表中選取 [概觀 ],然後查看 [網路 ] 區段。 如果您在 [公用 IP 位址] 旁看到 IP 位址,則表示您的 VM 具有公用 IP。 若要深入瞭解如何將公用 IP 位址新增至現有的 VM,請參閱將公用 IP 位址與虛擬機器建立關聯
確認您的 VM 正在執行。 在 [概觀] 索引標籤的 [基本資訊] 區段中,確認 VM 的狀態為 [正在執行]。 若要啟動 VM,請選取頁面頂端的 [啟動 ]。
驗證
您可以透過使用者名稱和密碼或是 SSH 金鑰向 Windows 機器進行驗證。 Azure 不支援自動將公開金鑰佈建至 Windows 機器,不過您可以使用 RunCommand 延伸模組複製金鑰。
SSH 和金鑰的概觀
SSH 是已加密連線通訊協定,可透過不安全的連線提供安全登入。 雖然 SSH 提供加密的連線,但使用密碼搭配 SSH 連線仍會讓 VM 容易遭受暴力密碼破解攻擊。 建議您使用公開-私密金鑰組 (也稱為 SSH 金鑰 ),透過 SSH 連線至 VM。
當您使用 SSH 用戶端連線到 VM (具有公鑰) 時,遠程 VM 會測試用戶端以確保其具有正確的私密金鑰。 如果用戶端具有私密金鑰,則會獲得 VM 的存取權。
根據組織的安全性原則,您可以重複使用單一公用/私密金鑰組來存取多個 Azure VM 和服務。 您想要存取的每個 VM 或服務都不需要各有一對金鑰。
公開金鑰可以與任何人共用,但只有您 (或您的本機安全性基礎結構) 才應該有權存取私密金鑰。
Azure 目前支援下列金鑰類型:
SSH 通訊協定 2 (SSH-2) RSA (Rivest, Shamir, Adleman) 最小長度為 2048 位
ED25519長度為256位的金鑰
目前不支援其他主要格式,例如橢圓曲線 Diffie–Hellman (ECDH) 和橢圓曲線數位簽名演算法 (ECDSA)。
使用 RunCommand 延伸模組複製公開金鑰。
RunCommand 延伸模組提供簡易的解決方案,可將公開金鑰複製到 Windows 機器,並確定檔案具有正確的權限。
az vm run-command invoke -g $myResourceGroup -n $myVM --command-id RunPowerShellScript --scripts "MYPUBLICKEY | Add-Content 'C:\ProgramData\ssh\administrators_authorized_keys' -Encoding UTF8;icacls.exe 'C:\ProgramData\ssh\administrators_authorized_keys' /inheritance:r /grant 'Administrators:F' /grant 'SYSTEM:F'"
Invoke-AzVMRunCommand -ResourceGroupName $myResourceGroup -VMName $myVM -CommandId 'RunPowerShellScript' -ScriptString "MYPUBLICKEY | Add-Content 'C:\ProgramData\ssh\administrators_authorized_keys' -Encoding UTF8;icacls.exe 'C:\ProgramData\ssh\administrators_authorized_keys' /inheritance:r /grant 'Administrators:F' /grant 'SYSTEM:F'"
{
"type": "Microsoft.Compute/virtualMachines/runCommands",
"apiVersion": "2022-03-01",
"name": "[concat(parameters('VMName'), '/RunPowerShellScript')]",
"location": "[parameters('location')]",
"properties": {
"timeoutInSeconds":600
"source": {
"script": "MYPUBLICKEY | Add-Content 'C:\\ProgramData\\ssh\\administrators_authorized_keys -Encoding UTF8';icacls.exe 'C:\\ProgramData\\ssh\\administrators_authorized_keys' /inheritance:r /grant 'Administrators:F' /grant 'SYSTEM:F'"
}
}
}
resource runPowerShellScript 'Microsoft.Compute/virtualMachines/runCommands@2022-03-01' = {
name: 'RunPowerShellScript'
location: resourceGroup().location
parent: virtualMachine
properties: {
timeoutInSeconds: 600
source: {
script: "MYPUBLICKEY | Add-Content 'C:\ProgramData\ssh\administrators_authorized_keys' -Encoding UTF8;icacls.exe 'C:\ProgramData\ssh\administrators_authorized_keys' /inheritance:r /grant 'Administrators:F' /grant 'SYSTEM:F'"
}
}
}
使用 Az CLI 連線
使用 Az SSH
命令連線到 Windows 機器。
az ssh vm -g $myResourceGroup -n $myVM --local-user $myUsername
您也可以透過 SSH 連線為特定 TCP 連接埠建立網路通道。 良好的使用案例之一是將遠端桌面預設為連接埠 3389。
az ssh vm -g $myResourceGroup -n $myVM --local-user $myUsername -- -L 3389:localhost:3389
從 Azure 入口網站連線
前往 Azure 入口網站 以連線至 VM。 搜尋並選取 [虛擬機器] 。
然後從清單中選取虛擬機器。
從左側功能表中選取 [連線] 。
請選取適合您慣用連線方式的選項。 入口網站將帶您瞭解連線的必要條件。
下一步
了解如何將檔案傳送至現有的 VM,請參閱使用 SCP 將檔案移至和移出 VM 。