簡単な手順: Azure 内に Linux VM 用の SSH 公開/秘密キーのペアを作成して使用する

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

Secure Shell (SSH) キーの組を使用すると、認証に SSH キーを使う仮想マシン (VM) を Azure に作成できます。 この記事では、Linux VM 用の SSH 公開キー ファイルと秘密キー ファイルのペアを短時間で生成して使用する方法について説明します。 この手順は、Azure Cloud Shell、macOS、または Linux ホストで実行できます。

問題のトラブルシューティングに役立つ情報については、「Azure Linux VM に対する SSH 接続の失敗、エラー、拒否のトラブルシューティング」を参照してください。

Note

既定では、SSH キーを使用して作成された VM は、パスワードが無効にされます。そのため、推測によるブルート フォース攻撃が大幅に困難になります。

詳しい背景と例については、SSH キー ペアを作成するための詳細な手順に関するページを参照してください。

Windows コンピューター上で、SSH キーを生成して使用するその他の方法については、「Azure 上の Windows で SSH キーを使用する方法」を参照してください。

サポートされる SSH キーの形式

Azure は、現在、SSH プロトコル 2 (SSH-2) の RSA 公開キー/秘密キーのペア (最小長: 2048 ビット) をサポートしています。 その他のキーの形式 (ED25519 や ECDSA など) はサポートされていません。

SSH キー ペアの作成

ssh-keygen コマンドを使用して、SSH 公開キーと秘密キーのファイルを生成します。 既定では、これらのファイルは ~/.ssh ディレクトリに作成されます。 秘密キー ファイルにアクセスするには、別の場所、および任意のパスワード (パスフレーズ) を指定できます。 同じ名前の SSH キー ペアが指定された場所にある場合、それらのファイルは上書きされます。

次のコマンドでは、RSA 暗号化と 4096 ビット長を使用して SSH キー ペアが作成されます。

ssh-keygen -m PEM -t rsa -b 4096

Note

SSH キーを生成して格納する方法の説明に従って、az sshkey create コマンドを使用して Azure CLI でキーの組を作成することもできます。

Azure CLI を使用して az vm create コマンドで VM を作成する場合は、必要に応じて --generate-ssh-keys オプションを使用して、SSH 公開キー ファイルと秘密キー ファイルを生成できます。 --ssh-dest-key-path オプションで指定されない限り、キー ファイルは ~/.ssh ディレクトリに格納されます。 SSH キーの組が既に存在していて、--generate-ssh-keys オプションが使用されている場合は、新しいキーの組は生成されず、代わりに既存のキーの組が使用されます。 次のコマンドで、VMnameRGnameUbuntuLTS を独自の値に置き換えます。

az vm create --name VMname --resource-group RGname --image Ubuntu2204 --generate-ssh-keys

VM をデプロイするときに SSH 公開キーを提供する

認証するために SSH キーを使用する Linux VM を作成するには、Azure portal、Azure CLI、Azure Resource Manager テンプレート、またはその他の方法を使用して VM を作成するときに SSH 公開キーを指定します。

SSH 公開キーの形式になじみのない場合は、次の cat コマンドでご利用の公開キーを表示できます。必要に応じて、~/.ssh/id_rsa.pub を独自の公開キー ファイルのパスとファイル名に置き換えます。

cat ~/.ssh/id_rsa.pub

一般的な公開キーの値は次の例のようになります。

ssh-rsa AAAAB3NzaC1yc2EAABADAQABAAACAQC1/KanayNr+Q7ogR5mKnGpKWRBQU7F3Jjhn7utdf7Z2iUFykaYx+MInSnT3XdnBRS8KhC0IP8ptbngIaNOWd6zM8hB6UrcRTlTpwk/SuGMw1Vb40xlEFphBkVEUgBolOoANIEXriAMvlDMZsgvnMFiQ12tD/u14cxy1WNEMAftey/vX3Fgp2vEq4zHXEliY/sFZLJUJzcRUI0MOfHXAuCjg/qyqqbIuTDFyfg8k0JTtyGFEMQhbXKcuP2yGx1uw0ice62LRzr8w0mszftXyMik1PnshRXbmE2xgINYg5xo/ra3mq2imwtOKJpfdtFoMiKhJmSNHBSkK7vFTeYgg0v2cQ2+vL38lcIFX4Oh+QCzvNF/AXoDVlQtVtSqfQxRVG79Zqio5p12gHFktlfV7reCBvVIhyxc2LlYUkrq4DHzkxNY5c9OGSHXSle9YsO3F1J5ip18f6gPq4xFmo6dVoJodZm9N0YMKCkZ4k1qJDESsJBk2ujDPmQQeMjJX3FnDXYYB182ZCGQzXfzlPDC29cWVgDZEXNHuYrOLmJTmYtLZ4WkdUhLLlt5XsdoKWqlWpbegyYtGZgeZNRtOOdN6ybOPJqmYFd2qRtb4sYPniGJDOGhx4VodXAjT09omhQJpE6wlZbRWDvKC55R2d/CSPHJscEiuudb+1SG2uA/oik/WQ== username@domainname

公開キー ファイルの内容をコピーし、Azure portal または Resource Manager テンプレートに貼り付けて使用する場合は、行末の空白スペースをコピーしないように注意してください。 macOS で公開キーをコピーするには、公開キー ファイルを pbcopy にパイプすることができます。 Linux と同様に、xclip などのプログラムに公開キー ファイルをパイプすることができます。

キー ペアの作成時に別の場所を指定しない限り、Azure 内の Linux VM 上に配置した公開キーは、既定で ~/.ssh/id_rsa.pub に格納されます。 Azure CLI 2.0 を使用して既存の公開キーで VM を作成するには、az vm create コマンドを --ssh-key-values オプション付きで使用することで、この公開キーの値または任意で場所を指定します。 次のコマンドでは、myVMmyResourceGroupUbuntuLTSazureusermysshkey.pub を実際の値に置き換えます。

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --ssh-key-values mysshkey.pub

VM で複数の SSH キーを使う場合は、この --ssh-key-values sshkey-desktop.pub, sshkey-laptop.pub のように、コンマ区切りのリストで入力できます。

VM への SSH 接続

公開キーを Azure VM に、秘密キーをローカル システム上にデプロイした状態で、ご利用の VM の IP アドレスまたは DNS 名を使用して、VM に SSH 接続します。 次のコマンドの azureusermyvm.westus.cloudapp.azure.com を、管理者のユーザー名と完全修飾ドメイン名 (または IP アドレス) に置き換えてください。

ssh azureuser@myvm.westus.cloudapp.azure.com

この VM に初めて接続しようとしている場合は、ホストのフィンガープリントを確認するよう求められます。 表示されたフィンガープリントを受け入れたくなりますが、そのようにすると、中間者攻撃にさらされる危険性があります。 ホストのフィンガープリントは必ず検証してください。 これは、クライアントから初めて接続するときにのみ行う必要があります。 ポータルからホストのフィンガープリントを取得するには、実行コマンド機能を使用して ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}' コマンドを実行します。

Screenshot showing using the Run Command to validate the host fingerprint.

CLI を使用してコマンドを実行するには、az vm run-command invoke を使用します。

キー ペアを作成するときにパスフレーズを指定した場合は、サインイン プロセス中に入力を求められたときにそのパスフレーズを入力します。 VM は ~/.ssh/known_hosts ファイルに追加されます。Azure VM にある公開キーが変更されるか、サーバー名が ~/.ssh/known_hosts から削除されるまで、再度接続を求められることはありません。

VM が Just-In-Time アクセス ポリシーを使用している場合、VM に接続するにはアクセス権を要求する必要があります。 Just-In-Time ポリシーの詳細については、Just in Time ポリシーを使用した仮想マシン アクセスの管理に関するページを参照してください。

次のステップ