मुख्य सामग्री पर जाएं
यह मार्गदर्शिका Azure CLI के साथ Azure Linux VM सेट अप करती है, Network Security Group (NSG) हार्डनिंग लागू करती है, SSH पहुंच के लिए Azure Bastion कॉन्फ़िगर करती है, और OpenClaw इंस्टॉल करती है।

आप क्या करेंगे

  • Azure CLI के साथ Azure नेटवर्किंग (VNet, सबनेट, NSG) और कंप्यूट संसाधन बनाना
  • Network Security Group नियम लागू करना ताकि VM SSH केवल Azure Bastion से अनुमति पाए
  • SSH पहुंच के लिए Azure Bastion का उपयोग करना (VM पर कोई सार्वजनिक IP नहीं)
  • इंस्टॉलर स्क्रिप्ट के साथ OpenClaw इंस्टॉल करना
  • Gateway सत्यापित करना

आपको क्या चाहिए

  • कंप्यूट और नेटवर्क संसाधन बनाने की अनुमति वाली Azure सदस्यता
  • Azure CLI इंस्टॉल किया हुआ (ज़रूरत हो तो Azure CLI इंस्टॉल चरण देखें)
  • एक SSH कुंजी युग्म (ज़रूरत होने पर यह मार्गदर्शिका उसे जनरेट करना कवर करती है)
  • ~20-30 मिनट

डिप्लॉयमेंट कॉन्फ़िगर करें

1

Azure CLI में साइन इन करें

az login
az extension add -n ssh
Azure Bastion नेटिव SSH टनलिंग के लिए ssh एक्सटेंशन आवश्यक है।
2

आवश्यक संसाधन प्रदाताओं को रजिस्टर करें (एक बार)

az provider register --namespace Microsoft.Compute
az provider register --namespace Microsoft.Network
रजिस्ट्रेशन सत्यापित करें। दोनों में Registered दिखने तक प्रतीक्षा करें।
az provider show --namespace Microsoft.Compute --query registrationState -o tsv
az provider show --namespace Microsoft.Network --query registrationState -o tsv
3

डिप्लॉयमेंट वेरिएबल सेट करें

RG="rg-openclaw"
LOCATION="westus2"
VNET_NAME="vnet-openclaw"
VNET_PREFIX="10.40.0.0/16"
VM_SUBNET_NAME="snet-openclaw-vm"
VM_SUBNET_PREFIX="10.40.2.0/24"
BASTION_SUBNET_PREFIX="10.40.1.0/26"
NSG_NAME="nsg-openclaw-vm"
VM_NAME="vm-openclaw"
ADMIN_USERNAME="openclaw"
BASTION_NAME="bas-openclaw"
BASTION_PIP_NAME="pip-openclaw-bastion"
अपने परिवेश के अनुसार नाम और CIDR रेंज समायोजित करें। Bastion सबनेट कम से कम /26 होना चाहिए।
4

SSH कुंजी चुनें

यदि आपके पास मौजूदा सार्वजनिक कुंजी है, तो उसका उपयोग करें:
SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"
यदि आपके पास अभी SSH कुंजी नहीं है, तो एक जनरेट करें:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "you@example.com"
SSH_PUB_KEY="$(cat ~/.ssh/id_ed25519.pub)"
5

VM आकार और OS डिस्क आकार चुनें

VM_SIZE="Standard_B2as_v2"
OS_DISK_SIZE_GB=64
अपनी सदस्यता और क्षेत्र में उपलब्ध VM आकार और OS डिस्क आकार चुनें:
  • हल्के उपयोग के लिए छोटे आकार से शुरू करें और बाद में स्केल अप करें
  • भारी ऑटोमेशन, अधिक चैनल, या बड़े मॉडल/टूल वर्कलोड के लिए अधिक vCPU/RAM/डिस्क का उपयोग करें
  • यदि कोई VM आकार आपके क्षेत्र या सदस्यता कोटा में उपलब्ध नहीं है, तो निकटतम उपलब्ध SKU चुनें
अपने लक्ष्य क्षेत्र में उपलब्ध VM आकारों की सूची देखें:
az vm list-skus --location "${LOCATION}" --resource-type virtualMachines -o table
अपना वर्तमान vCPU और डिस्क उपयोग/कोटा जांचें:
az vm list-usage --location "${LOCATION}" -o table

Azure संसाधन डिप्लॉय करें

1

संसाधन समूह बनाएं

az group create -n "${RG}" -l "${LOCATION}"
2

नेटवर्क सुरक्षा समूह बनाएं

NSG बनाएं और नियम जोड़ें ताकि केवल Bastion सबनेट VM में SSH कर सके।
az network nsg create \
  -g "${RG}" -n "${NSG_NAME}" -l "${LOCATION}"

# Allow SSH from the Bastion subnet only
az network nsg rule create \
  -g "${RG}" --nsg-name "${NSG_NAME}" \
  -n AllowSshFromBastionSubnet --priority 100 \
  --access Allow --direction Inbound --protocol Tcp \
  --source-address-prefixes "${BASTION_SUBNET_PREFIX}" \
  --destination-port-ranges 22

# Deny SSH from the public internet
az network nsg rule create \
  -g "${RG}" --nsg-name "${NSG_NAME}" \
  -n DenyInternetSsh --priority 110 \
  --access Deny --direction Inbound --protocol Tcp \
  --source-address-prefixes Internet \
  --destination-port-ranges 22

# Deny SSH from other VNet sources
az network nsg rule create \
  -g "${RG}" --nsg-name "${NSG_NAME}" \
  -n DenyVnetSsh --priority 120 \
  --access Deny --direction Inbound --protocol Tcp \
  --source-address-prefixes VirtualNetwork \
  --destination-port-ranges 22
नियमों का मूल्यांकन प्राथमिकता के अनुसार किया जाता है (सबसे कम संख्या पहले): Bastion ट्रैफ़िक को 100 पर अनुमति मिलती है, फिर बाकी सभी SSH को 110 और 120 पर ब्लॉक किया जाता है।
3

वर्चुअल नेटवर्क और सबनेट बनाएं

VM सबनेट (NSG संलग्न) के साथ VNet बनाएं, फिर Bastion सबनेट जोड़ें।
az network vnet create \
  -g "${RG}" -n "${VNET_NAME}" -l "${LOCATION}" \
  --address-prefixes "${VNET_PREFIX}" \
  --subnet-name "${VM_SUBNET_NAME}" \
  --subnet-prefixes "${VM_SUBNET_PREFIX}"

# Attach the NSG to the VM subnet
az network vnet subnet update \
  -g "${RG}" --vnet-name "${VNET_NAME}" \
  -n "${VM_SUBNET_NAME}" --nsg "${NSG_NAME}"

# AzureBastionSubnet — name is required by Azure
az network vnet subnet create \
  -g "${RG}" --vnet-name "${VNET_NAME}" \
  -n AzureBastionSubnet \
  --address-prefixes "${BASTION_SUBNET_PREFIX}"
4

VM बनाएं

VM में कोई सार्वजनिक IP नहीं है। SSH पहुंच विशेष रूप से Azure Bastion के माध्यम से है।
az vm create \
  -g "${RG}" -n "${VM_NAME}" -l "${LOCATION}" \
  --image "Canonical:ubuntu-24_04-lts:server:latest" \
  --size "${VM_SIZE}" \
  --os-disk-size-gb "${OS_DISK_SIZE_GB}" \
  --storage-sku StandardSSD_LRS \
  --admin-username "${ADMIN_USERNAME}" \
  --ssh-key-values "${SSH_PUB_KEY}" \
  --vnet-name "${VNET_NAME}" \
  --subnet "${VM_SUBNET_NAME}" \
  --public-ip-address "" \
  --nsg ""
--public-ip-address "" सार्वजनिक IP असाइन होने से रोकता है। --nsg "" प्रति-NIC NSG बनाने को छोड़ देता है (सबनेट-स्तर का NSG सुरक्षा संभालता है)।पुनरुत्पादकता: ऊपर दिया गया कमांड Ubuntu इमेज के लिए latest का उपयोग करता है। किसी विशिष्ट संस्करण को पिन करने के लिए, उपलब्ध संस्करणों की सूची देखें और latest बदलें:
az vm image list \
  --publisher Canonical --offer ubuntu-24_04-lts \
  --sku server --all -o table
5

Azure Bastion बनाएं

Azure Bastion सार्वजनिक IP उजागर किए बिना VM तक प्रबंधित SSH पहुंच प्रदान करता है। CLI-आधारित az network bastion ssh के लिए टनलिंग वाला Standard SKU आवश्यक है।
az network public-ip create \
  -g "${RG}" -n "${BASTION_PIP_NAME}" -l "${LOCATION}" \
  --sku Standard --allocation-method Static

az network bastion create \
  -g "${RG}" -n "${BASTION_NAME}" -l "${LOCATION}" \
  --vnet-name "${VNET_NAME}" \
  --public-ip-address "${BASTION_PIP_NAME}" \
  --sku Standard --enable-tunneling true
Bastion प्रोविजनिंग में आम तौर पर 5-10 मिनट लगते हैं, लेकिन कुछ क्षेत्रों में 15-30 मिनट तक लग सकते हैं।

OpenClaw इंस्टॉल करें

1

Azure Bastion के माध्यम से VM में SSH करें

VM_ID="$(az vm show -g "${RG}" -n "${VM_NAME}" --query id -o tsv)"

az network bastion ssh \
  --name "${BASTION_NAME}" \
  --resource-group "${RG}" \
  --target-resource-id "${VM_ID}" \
  --auth-type ssh-key \
  --username "${ADMIN_USERNAME}" \
  --ssh-key ~/.ssh/id_ed25519
2

OpenClaw इंस्टॉल करें (VM शेल में)

curl -fsSL https://openclaw.ai/install.sh -o /tmp/install.sh
bash /tmp/install.sh
rm -f /tmp/install.sh
इंस्टॉलर Node LTS और निर्भरताएं इंस्टॉल करता है यदि वे पहले से मौजूद नहीं हैं, OpenClaw इंस्टॉल करता है, और ऑनबोर्डिंग विज़ार्ड लॉन्च करता है। विवरण के लिए इंस्टॉल देखें।
3

Gateway सत्यापित करें

ऑनबोर्डिंग पूरी होने के बाद:
openclaw gateway status
अधिकांश एंटरप्राइज़ Azure टीमों के पास पहले से GitHub Copilot लाइसेंस होते हैं। यदि आपके मामले में ऐसा है, तो हम OpenClaw ऑनबोर्डिंग विज़ार्ड में GitHub Copilot प्रदाता चुनने की अनुशंसा करते हैं। GitHub Copilot प्रदाता देखें।

लागत संबंधी विचार

Azure Bastion Standard SKU लगभग $140/माह चलता है और VM (Standard_B2as_v2) लगभग $55/माह चलता है। लागत कम करने के लिए:
  • VM को डिअलोकेट करें जब उपयोग में न हो (कंप्यूट बिलिंग रुकती है; डिस्क शुल्क बने रहते हैं)। VM डिअलोकेट होने पर OpenClaw Gateway पहुंच योग्य नहीं होगा — जब आपको इसे फिर से लाइव चाहिए, तो इसे पुनः प्रारंभ करें:
    az vm deallocate -g "${RG}" -n "${VM_NAME}"
    az vm start -g "${RG}" -n "${VM_NAME}"   # restart later
    
  • Bastion की आवश्यकता न होने पर उसे हटाएं और SSH पहुंच की आवश्यकता होने पर फिर से बनाएं। Bastion सबसे बड़ा लागत घटक है और इसे प्रोविजन करने में केवल कुछ मिनट लगते हैं।
  • यदि आपको केवल Portal-आधारित SSH चाहिए और CLI टनलिंग (az network bastion ssh) की आवश्यकता नहीं है, तो Basic Bastion SKU (~$38/माह) का उपयोग करें।

क्लीनअप

इस मार्गदर्शिका द्वारा बनाए गए सभी संसाधन हटाने के लिए:
az group delete -n "${RG}" --yes --no-wait
यह संसाधन समूह और उसके अंदर की हर चीज़ (VM, VNet, NSG, Bastion, सार्वजनिक IP) हटा देता है।

अगले चरण

संबंधित