詳細な手順: Azure の Linux VM に対する認証用に SSH キーを作成して管理する
適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット
Secure Shell (SSH) キーの組を使用すると、認証に SSH キーを使う Linux 仮想マシンを作成できます。 この記事では、SSH クライアント接続用の SSH RSA 公開/秘密キー ファイル ペアを作成して使用する方法について説明します。
SSH キーの詳細な説明ではなく、迅速なコマンドが必要な場合は、Azure に Linux VM 用の SSH 公開キーと秘密キーのペアを作成する方法に関するページを参照してください。
SSH キーを作成し、それを使って Windows コンピューターから Linux VM に接続する方法については、「Azure 上の Windows で SSH キーを使用する方法」を参照してください。 また、Azure portal を使用して、VM を作成するための SSH キーをポータルで作成して管理することもできます。
SSH とキーの概要
SSH は、セキュリティで保護されていない接続において安全なサインインを可能にする、暗号化された接続プロトコルです。 SSH は暗号化された接続を提供しますが、SSH 接続でパスワードを使用すると、VM はブルートフォース攻撃に対して脆弱になります。 SSH を介して VM に接続する場合は、公開キーと秘密キーのペアを使用することをお勧めします。これは "SSH キー" とも呼ばれています。
公開キーは、VM 上に配置されます。
秘密キーは、ローカル システム上に残ります。 このキーは安全に保管してください。 このキーは共有しないようにしてください。
SSH クライアントを使用して自分の VM (公開キーがある) に接続するときに、リモート VM によってクライアントがテストされ、正しい秘密キーの存在が確認されます。 クライアントに秘密キーがある場合、VM へのアクセス権が付与されます。
組織のセキュリティ ポリシーに応じて、単一の公開キーと秘密キーのペアを再利用して複数の Azure VM とサービスにアクセスできます。 アクセスする VM またはサービスごとに異なるキーのペアを用意する必要はありません。
ご自分の公開キーはだれとでも共有できますが、ご自分の秘密キーへのアクセス権を所有するのは自分 (またはローカル セキュリティ インフラストラクチャ) のみとする必要があります。
サポートされる SSH キーの形式
現在、Azure では次のキーの種類がサポートされています。
- 最小長が 2,048 ビットの SSH プロトコル 2 (SSH-2) RSA (Rivest、Shamir、Adleman)
- 固定長 256 ビットの ED25519 キー
現在、elliptic curve Diffie-Hellman (ECDH) や楕円曲線デジタル署名アルゴリズム (ECDSA) などの他のキー形式はサポートされていません。
SSH キーの使用方法と利点
公開キーを指定して Azure VM を作成すると、Azure は公開キーを (.pub
の形式で) VM の ~/.ssh/authorized_keys
フォルダーにコピーします。 ~/.ssh/authorized_keys
の SSH キーによって、SSH 接続中に接続クライアントが対応する秘密キーを確実に提示するようにします。 認証に SSH キーを使用する Azure Linux VM では、Azure が SSH サーバーのパスワード認証システムを無効にし、SSH キー認証のみを許可します。 SSH キーで Azure Linux VM を作成すると、VM のデプロイをセキュリティで保護し、一般的なデプロイ後の構成手順である sshd_config
ファイル内のパスワードの無効化を省略できます。
SSH キーを使用したくない場合は、パスワード認証を使うように Linux VM を設定できます。 VM がインターネットに公開されない場合は、パスワードを使用するだけで十分なことがあります。 ただし、Linux VM ごとにパスワードを管理し、パスワードの最小の長さ、定期的なシステム更新など、優良なパスワードのポリシーと運用を維持する必要があります。
ssh-keygen でキーを生成する
キーを作成するための推奨されるコマンドは ssh-keygen
です。このコマンドは、Azure Cloud Shell、macOS、Linux ホスト上の OpenSSH ユーティリティや、Windows (10 および 11) で利用できます。 ssh-keygen
では、一連の質問に答えることによって、秘密キーと対応する公開キーが出力されます。
SSH キーは既定で ~/.ssh
ディレクトリに保持されます。 ~/.ssh
ディレクトリがない場合、ssh-keygen
コマンドによって、適切なアクセス許可で作成されます。 SSH キーはリソースとして作成され、後で使用するために Azure に格納されます。
Note
SSH キーを生成して格納する方法の説明に従って、az sshkey create コマンドを使用して Azure CLI でキーを作成することもできます。
基本的な例
次の ssh-keygen
コマンドは、既定で、4096 ビットの SSH RSA 公開および秘密キー ファイルを ~/.ssh
ディレクトリに生成します。 既存の SSH キー ペアが現在の場所で見つかった場合、それらのファイルは上書きされます。
ssh-keygen -m PEM -t rsa -b 4096
次の ssh-keygen
コマンドは、既定で、256 ビットの ED25519 公開と秘密キー ファイルを ~/.ssh
ディレクトリに生成します。 既存の SSH キー ペアが現在の場所で見つかった場合、それらのファイルは上書きされます。
ssh-keygen -m PEM -t ed25519
詳細な例
次の例では、SSH RSA キー ペアを作成するためのその他のコマンド オプションを示します。 SSH キー ペアが現在の場所にある場合、それらのファイルは上書きされます。
ssh-keygen \
-m PEM \
-t rsa \
-b 4096 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myrsaprivatekey \
-N mypassphrase
次の例では、SSH ED25519 キー ペアを作成するためのその他のコマンド オプションを示します。 SSH キー ペアが現在の場所にある場合、それらのファイルは上書きされます。
ssh-keygen \
-m PEM \
-t ed25519 \
-C "azureuser@myserver" \
-f ~/.ssh/mykeys/myedprivatekey \
-N mypassphrase
コマンドの説明
ssh-keygen
= キーの作成に使用するプログラム。
-m PEM
= キー を PEM としてフォーマットする
-t rsa
= 作成するキーの種類。この場合は RSA 形式。
-b 4096
= キーのビット数。この場合は 4096。
-C "azureuser@myserver"
= 識別しやすいように公開キー ファイルの末尾に追記されたコメント。 通常はメール アドレスがコメントとして使用されますが、インフラストラクチャに最適な文字列を使用します。
-f ~/.ssh/mykeys/myprivatekey
= 既定の名前を使用しない場合の、秘密キー ファイルのファイル名。 .pub
を付加された対応する公開キー ファイルが、同じディレクトリに生成されます。 ディレクトリは存在している必要があります。
-N mypassphrase
= 秘密キー ファイルへのアクセスに使用される追加のパスフレーズ。
ssh-keygen の例 (RSA)
ssh-keygen -t rsa -m PEM -b 4096 -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_rsa.
Your public key has been saved in /home/azureuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[RSA 4096]----+
| .oE=*B*+ |
| o+o.*++|
| .oo++*|
| . .B+.O|
| S o=BO.|
| . .o++o |
| . ... . |
| .. . |
| .. |
+----[SHA256]-----+
ssh-keygen の例 (ED25519)
ssh-keygen -t ed25519 -m PEM -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_ed25519.
Your public key has been saved in /home/azureuser/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[ED25519 256]----+
| |
|.. . |
|o+.o . |
|*=o o o + + |
|*+o+ oSB + o |
|**++o.+oo = . |
|=+*..*.o E |
|.. o o.. |
| .o. |
+----[SHA256]-----+
保存されるキー ファイル
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa
または
Enter file in which to save the key (/home/azureuser/.ssh/id_ed25519): ~/.ssh/id_ed25519
RSA と ED25519 の既定のキー ペア名はそれぞれ id_rsa
と id_ed25519
です。一部のツールでは、id_rsa
または id_ed25519
の秘密キー ファイル名が必要な場合があるため、使用することをお勧めします。 ディレクトリ ~/.ssh/
は、SSH キー ペアと SSH 構成ファイルの既定の場所です。 完全パスで指定されていない場合、ssh-keygen
は、既定の ~/.ssh
ではなく、現在の作業ディレクトリにキーを作成します。
~/.ssh
ディレクトリのリスト
~/.ssh
ディレクトリ内の既存のファイルを表示するには、次のコマンドを実行します。 ディレクトリにファイルが見つからないか、またはディレクトリ自体が見つからない場合は、以前のすべてのコマンドが正常に実行されたことを確認してください。 特定の Linux ディストリビューションでは、このディレクトリ内のファイルを変更するために、ルート アクセスが必要な場合があります。
RSA キー ペア:
ls -al ~/.ssh
-rw------- 1 azureuser staff 1675 Aug 25 18:04 id_rsa
-rw-r--r-- 1 azureuser staff 410 Aug 25 18:04 id_rsa.pub
ED25519 キー ペア:
ls -al ~/.ssh
-rw------- 1 azureuser staff 1675 Aug 25 18:04 id_ed25519
-rw-r--r-- 1 azureuser staff 410 Aug 25 18:04 id_ed25519.pub
キーのパスフレーズ
Enter passphrase (empty for no passphrase):
秘密キーにはパスフレーズを追加することを "強く" お勧めします。 キー ファイルを保護するパスフレーズがないと、ファイルを持っている人はだれでも、そのファイルを使用して、対応する公開キーのあるサーバーにサインインすることができます。 パスフレーズを追加すれば、第三者に秘密キー ファイルへのアクセスを許してしまった場合でも、キーを変更する時間ができるので、保護のレベルが上がります。
展開の間にキーを自動生成する
Azure CLI を使用して VM を作成する場合は、必要に応じてaz vm create コマンドを --generate-ssh-keys
オプション付きで実行することで、SSH 公開キーと SSH 秘密キーの両方のファイルを作成できます。 追加のフラグ --ssh-key-type
コマンド内で渡すことができる ED25519 キーを生成するために、このコマンドを使用して、キーの種類の既定値を RSA に設定します。 キーは、~/.ssh ディレクトリに格納されます。 このコマンド オプションは、事前に構成されたコンピューティング ギャラリー イメージなど、その場所にキーが既に存在する場合でもキーを上書きしないことに注意してください。
基本的な例
Ed25519 SSH キーの組と共にシンプルな Ubuntu Linux VM を作成します。
az vm create -n MyVm -g MyResourceGroup --image Ubuntu2204 --generate-ssh-keys --ssh-key-type ed25519
VM を展開するときに SSH 公開キーを提供する
認証するために SSH キーを使用する Linux VM を作成するには、Azure Portal、CLI、Resource Manager テンプレート、またはその他の方法を使用して VM を作成するときに SSH 公開キーを提供します。 ポータルを使用するときは、公開キー自体を入力します。 Azure CLI で既存の公開キーを使用する VM を作成する場合は、az vm create コマンドを --ssh-key-value
オプション付きで実行することで、使用する公開キーの値または場所を指定します。
SSH 公開キーの書式がわからない場合は、次のように cat
を実行して公開キーを表示できます。~/.ssh/id_rsa.pub
の部分は実際の公開キー ファイルの場所に置き換えてください。
RSA キー ペア
cat ~/.ssh/id_rsa.pub
出力は次のようになります (以下は編集された例)。
ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver
公開キー ファイルの内容をコピーし、Azure portal または Resource Manager テンプレートに貼り付ける場合は、余分な空白文字をコピーしたり、改行を追加したりしないように注意してください。 たとえば、macOS を使用している場合は、公開キー ファイル (既定では ~/.ssh/id_rsa.pub
) を pbcopy にパイプして、内容をコピーできます (xclip
など、同じ目的を達成できる Linux プログラムが他にもあります)。
複数行形式の公開キーを使う方がよい場合は、前に作成した公開キーから pem コンテナーに RFC4716 形式のキーを生成できます。
既存の SSH 公開キーから RFC4716 形式のキーを作成するには、次のようにします。
ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem
ED25519 キー ペア
cat ~/.ssh/id_ed25519.pub
出力は次のようになります (以下は編集された例)。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA azureuser@myserver
公開キー ファイルの内容をコピーし、Azure portal または Resource Manager テンプレートに貼り付ける場合は、余分な空白文字をコピーしたり、改行を追加したりしないように注意してください。 たとえば、macOS を使用している場合は、公開キー ファイル (既定では ~/.ssh/id_ed25519.pub
) を pbcopy にパイプして、内容をコピーできます (xclip
など、同じ目的を達成できる Linux プログラムが他にもあります)。
複数行形式の公開キーを使う方がよい場合は、前に作成した公開キーから pem コンテナーに RFC4716 形式のキーを生成できます。
既存の SSH 公開キーから PEM 形式のキーを作成するには、次のコマンドを使用します。
ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.pem
SSH クライアントを使用して VM に SSH 接続する
公開キーを Azure VM に、秘密キーをローカル システム上に配置した状態で、VM の IP アドレスまたは DNS 名を使用して、VM に SSH 接続します。 次のコマンドの azureuser と myvm.westus.cloudapp.azure.com を、管理者のユーザー名と完全修飾ドメイン名 (または IP アドレス) に置き換えてください。
ssh azureuser@myvm.westus.cloudapp.azure.com
キー ペアを作成する際にパスフレーズを指定した場合は、サインイン プロセス中に入力を求められたら、そのパスフレーズを入力します (サーバーは ~/.ssh/known_hosts
フォルダーに追加されます。Azure VM にある公開キーが変更されるかサーバー名が ~/.ssh/known_hosts
から削除されるまで、再度接続を求められることはありません)。
VM が Just-In-Time アクセス ポリシーを使用している場合、VM に接続するにはアクセス権を要求する必要があります。 Just-In-Time ポリシーの詳細については、Just in Time ポリシーを使用した仮想マシン アクセスの管理に関するページを参照してください。
ssh-agent を使用して秘密キーのパスフレーズを格納する
SSH サインインのたびに秘密キー ファイルのパスフレーズを入力しなくて済むように、ssh-agent
を使用して秘密キー ファイルのパスフレーズをローカル システム上にキャッシュできます。 Mac を使用している場合、ssh-agent
を呼び出すと、秘密キーのパスフレーズは macOS キーチェーンによって安全に保存されます。
パスフレーズを対話的に使用する必要がないように、ssh-agent
と ssh-add
を確認して使用し、キー ファイルに関する情報を SSH システムに伝えます。
eval "$(ssh-agent -s)"
ここで、ssh-add
コマンドを使用して、ssh-agent
に秘密キーを追加します。
ssh-add ~/.ssh/id_rsa
または
ssh-add ~/.ssh/id_ed25519
これで、秘密キーのパスフレーズが ssh-agent
に格納されました。
ssh-copy-id を使用して既存の VM にキーをコピーする
既に VM を作成済みの場合は、ssh-copy-id
を使用して、Linux VM に新しい SSH 公開キーを追加できます。
ssh-copy-id -i ~/.ssh/id_rsa.pub azureuser@myserver
SSH 構成ファイルの作成と構成
SSH 構成ファイル (~/.ssh/config
) を作成して構成すると、ログインを高速化し、SSH クライアントの動作を最適化することができます。
次の例で示す簡単な構成を使うと、既定の SSH 秘密キーを使って、特定の VM にユーザーとしてすばやくサインインできます。
ファイルを作成します。
touch ~/.ssh/config
ファイルを編集して新しい SSH 構成を追加する
vim ~/.ssh/config
ホスト VM に適した構成設定を追加します。 この例では、VM 名 (Host) は myvm、アカウント名 (User) は azureuser、IP アドレスまたは FQDN (Hostname) は 192.168.0.255 です。
# Azure Keys
Host myvm
Hostname 192.168.0.255
User azureuser
# ./Azure Keys
追加のホストに構成を追加することで、それぞれが独自の専用キー ペアを使用するようにできます。 高度な構成オプションについて詳しくは、「SSH config file」(SSH 構成ファイル) をご覧ください。
SSH キー ペアを作成し、SSH 構成ファイルを構成したので、すばやく安全にリモートから Linux VM にアクセスできるようになりました。 次のコマンドを実行すると、SSH は SSH 構成ファイルを探して、その Host myvm
ブロックからすべての設定を読み込みます。
ssh myvm
SSH キーを使用して初めてサーバーにサインインするとき、キー ファイルのパスフレーズを入力するように求められます。
次のステップ
次のステップでは、新しい SSH 公開キーを使用して Azure Linux VM を作成します。 Azure VM は、SSH 公開キーをサインインとして作成した方が、既定のサインイン方法であるパスワードを使って作成するよりも高いセキュリティが得られます。