背景と目的
今まではパスワード認証かつ接続元の IP アドレスを絞って SSH 接続する方法で Azure Linux VM を検証に使ってきましたが、毎回ランダムなパスワードを生成してコピペするのが面倒になってきました。そこで毎回コピペせずに都度違う SSH キーを使う方法を 3 パターン試してみました。
- SSH キーペアをローカルで作成して使う方法
- SSH キーペアをローカルで作って SSH 公開キーを Azure に登録して使う方法
- SSH キーペアを Azure で作成して SSH 秘密キーをローカルに保存して使う方法
前提条件
コマンドの実施環境は、Mac + Azure CLI です。
$ sw_vers
ProductName: macOS
ProductVersion: 12.1
BuildVersion: 21C52
$ az version
{
"azure-cli": "2.32.0",
"azure-cli-core": "2.32.0",
"azure-cli-telemetry": "1.0.6",
"extensions": {}
}
SSH キーペアをローカルで作成して使う方法
https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/mac-create-ssh-keys
上記サイトを参考に SSH キーペアを作成して SSH 接続するまでを試します。
# VM を作成するリージョンを設定します
region=japaneast
# リソース名のプレフィックスを設定します
prefix=mnrsshvm1
# リソースグループを作成します
az group create \
--name ${prefix}-rg \
--location $region
# SSH キーペアをファイル名を指定して作成します
ssh-keygen -m PEM -t rsa -b 4096 \
-f ${prefix}
# 作成した SSH 公開キーを指定して VM を作成します
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-vmOSDisk \
--image UbuntuLTS \
--admin-username azureuser \
--ssh-key-value ${prefix}.pub \
--size Standard_B1ls \
--nsg-rule NONE \
--storage-sku Standard_LRS
# NSG に自分の IP アドレスから SSH 接続出来るようにします
az network nsg rule create \
--resource-group ${prefix}-rg \
--name Allow-SSH \
--nsg-name ${prefix}-vmNSG \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info) \
--destination-port-ranges 22 \
--access Allow \
--protocol Tcp
# SSH 秘密キーを使用して SSH 接続します
ssh -i ${prefix} azureuser@$(az vm show \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--show-detail \
--query publicIps \
--output tsv)
# リソースグループを削除します
az group delete \
--name ${prefix}-rg
# 作成した SSH キーペアを削除します
rm -f ${prefix}*
SSH キーペアをローカルで作って SSH 公開キーを Azure に登録して使う方法
https://docs.microsoft.com/ja-jp/azure/virtual-machines/ssh-keys-azure-cli#upload-an-ssh-key
上記サイトを参考に SSH 公開キーを Azure にアップロードする手順が加わります。
# VM を作成するリージョンを設定します
region=japaneast
# リソース名のプレフィックスを設定します
prefix=mnrsshvm2
# リソースグループを作成します
az group create \
--name ${prefix}-rg \
--location $region
# SSH キーペアをファイル名を指定して作成します
ssh-keygen -m PEM -t rsa -b 4096 \
-f ${prefix}
# SSH 公開キーを Azure にアップロードします
az sshkey create \
--resource-group ${prefix}-rg \
--name ${prefix}-sshkey \
--public-key @${prefix}.pub
# アップロードした SSH 公開キーを指定して VM を作成します
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-vmOSDisk \
--image UbuntuLTS \
--admin-username azureuser \
--ssh-key-name ${prefix}-sshkey \
--size Standard_B1ls \
--nsg-rule NONE \
--storage-sku Standard_LRS
# NSG に自分の IP アドレスから SSH 接続出来るようにします
az network nsg rule create \
--resource-group ${prefix}-rg \
--name Allow-SSH \
--nsg-name ${prefix}-vmNSG \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info) \
--destination-port-ranges 22 \
--access Allow \
--protocol Tcp
# SSH 秘密キーを使用して SSH 接続します
ssh -i ${prefix} azureuser@$(az vm show \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--show-detail \
--query publicIps \
--output tsv)
# リソースグループを削除します
az group delete \
--name ${prefix}-rg
# 作成した SSH キーペアを削除します
rm -f ${prefix}*
SSH キーペアを Azure で作成して SSH 秘密キーをローカルに保存して使う方法
https://docs.microsoft.com/ja-jp/azure/virtual-machines/ssh-keys-azure-cli#generate-new-keys
上記サイトを参考に SSH キーペアを Azure で作成する手順が加わります。
# VM を作成するリージョンを設定します
region=japaneast
# リソース名のプレフィックスを設定します
prefix=mnrsshvm3
# リソースグループを作成します
az group create \
--name ${prefix}-rg \
--location $region
# SSH キーペアを Azure で作成します
az sshkey create \
--resource-group ${prefix}-rg \
--name ${prefix}-sshkey
# ローカルに保存されたファイル名が以下の例のように表示されます
Private key is saved to "/home/user/.ssh/7777777777_9999999".
Public key is saved to "/home/user/.ssh/7777777777_9999999.pub".
# ローカルに保存された秘密キーのパーミッションを変更します
chmod 600 /home/user/.ssh/7777777777_9999999
# アップロードした SSH 公開キーを指定して VM を作成します
az vm create \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--os-disk-name ${prefix}-vmOSDisk \
--image UbuntuLTS \
--admin-username azureuser \
--ssh-key-name ${prefix}-sshkey \
--size Standard_B1ls \
--nsg-rule NONE \
--storage-sku Standard_LRS
# NSG に自分の IP アドレスから SSH 接続出来るようにします
az network nsg rule create \
--resource-group ${prefix}-rg \
--name Allow-SSH \
--nsg-name ${prefix}-vmNSG \
--priority 100 \
--source-address-prefixes $(curl -s inet-ip.info) \
--destination-port-ranges 22 \
--access Allow \
--protocol Tcp
# SSH 秘密キーを使用して SSH 接続します
ssh -i ~/.ssh/7777777777_9999999 azureuser@$(az vm show \
--resource-group ${prefix}-rg \
--name ${prefix}-vm \
--show-detail \
--query publicIps \
--output tsv)
# リソースグループを削除します
az group delete \
--name ${prefix}-rg
# 作成した SSH キーペアを削除します
rm -f ~/.ssh/7777777777_9999999*
参考
https://docs.microsoft.com/ja-jp/cli/azure/vm?view=azure-cli-latest#az_vm_create