検索
連載

【Azure】Linux VMのSSHの公開鍵認証をデプロイ時に有効化する方法Tech TIPS

LinuxにSSHでログインする際、パスワードではなく公開鍵で認証するのが一般的だ。では、AzureでLinuxの仮想マシンをデプロイする場合、最初からSSHの公開鍵認証を有効化しつつパスワード認証を禁止する具体的な方法は?

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

Azure Linux VMにSSHで接続する際 パスワードではなく公開鍵で認証するには?(デプロイ時に自動設定)

対象:Azure Virtual Machine(仮想マシン)、Linux、Bicep


 LinuxにSSHでリモートからログインする際、認証にパスワードではなく公開鍵を利用するのが一般的になっている。特にインターネットから接続可能なサーバなどでは、パスワード認証は禁止して、より安全に運用できる公開鍵認証を有効化したいところだ。

 本Tech TIPSでは、AzureでLinuxベースの仮想マシン(Virtual Machine、VM)をデプロイする際、最初から公開鍵認証を有効化しつつ、パスワード認証を禁止する方法を紹介する。デプロイにはBicepを用いる。また、すでに秘密鍵/公開鍵のペアが存在することを前提としている。

■執筆時の各種ツール/APIのバージョン

  • Azure CLI: Ver. 2.50.0
  • Bicep CLI: Ver. 0.19.5
  • Bicepでのデプロイ時のAPIバージョン: 2022-11-01(仮想マシン生成)、2023-02-01(ネットワーク系リソース生成)

SSHで公開鍵認証のみ有効にしつつLinux VMをデプロイするには

 AzureではLinuxの仮想マシンをデプロイする際、SSHでログインするためのユーザー名とともに、その公開鍵を指定できる。具体的には、仮想マシンのリソースを生成するところで、[properties]−[osProfile]−[linuxConfiguration]−[ssh]−[publicKeys]に、公開鍵とその保存先のパスを記載すればよい。

 またパスワード認証を無効化するなら、[linuxConfiguration]に「disablePasswordAuthentication: true」を加える。

param location string = resourceGroup().location
param vmName string // 仮想マシンの名前
param adminUsername string // 管理アカウントのユーザー名
param adminPublicKey string = loadTextContent('id_rsa.pub') // RSA署名の公開鍵
// デフォルトでは、このBicepファイルと同じ場所にある「id_rsa.pub」に保存されている公開鍵が用いられる
// loadTextContent()では変数でファイル名を指定できないので注意

// リソース生成: 仮想マシン
resource vm 'Microsoft.Compute/virtualMachines@2022-11-01' = {
  name: vmName
  location: location
  properties: {
    osProfile: {
      computerName: vmName
      adminUsername: adminUsername
      linuxConfiguration: { // Linux特有の設定
        disablePasswordAuthentication: true // SSHでのパスワード認証を禁止
        ssh: {
          publicKeys: [
            {
              path: '/home/${adminUsername}/.ssh/authorized_keys' // 仮想マシン内での公開鍵の保存先
              keyData: adminPublicKey // 公開鍵そのもの
            }
          ]
        }
      }
    }
  }
}

// デプロイ後、確認のためにパラメータやプロパティを出力
output resouceType string = vm.type
output computerName string = vm.properties.osProfile.computerName
output adminUsername string = vm.properties.osProfile.adminUsername
output adminSSHPublicKey string = vm.properties.osProfile.linuxConfiguration.ssh.publicKeys[0].keyData

【Bicep】Linux VMのデプロイ時にSSH公開鍵認証を有効化する
仮想マシンのサイズ(SKU)やOSイメージ、ストレージ、ネットワーク、タグなどの設定は省いているので、必要に応じて追加/変更してほしい。
※Microsoftのレファレンス: Microsoft.Compute virtualMachines

 ネットワークセキュリティグループについては、最低限、SSHの受信を許可するためのセキュリティルール(受信ポートの規則)を追加する必要がある(もっとも、これは公開鍵認証に限らず、パスワード認証でも必要だ)。

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る