詳細な手順: Azure の Linux VM に対する認証用に SSH キーを作成して管理するDetailed steps: Create and manage SSH keys for authentication to a Linux VM in Azure

Secure Shell (SSH) のキー ペアを使用すると、既定で認証に SSH キーを使う Linux 仮想マシンを Azure 上に作成でき、サインインするためのパスワードが不要になります。With a secure shell (SSH) key pair, you can create a Linux virtual machine on Azure that defaults to using SSH keys for authentication, eliminating the need for passwords to sign in. Azure Portal、Azure CLI、Resource Manager テンプレート、他のツールで作成された VM は、展開の一部として SSH 公開キーを含むことができ、SSH 接続用に SSH キー認証が設定されます。VMs created with the Azure portal, Azure CLI, Resource Manager templates, or other tools can include your SSH public key as part of the deployment, which sets up SSH key authentication for SSH connections.

この記事では、SSH クライアント接続用の SSH RSA 公開/秘密キー ファイル ペアの作成と管理について、詳細な背景と手順を説明します。This article provides detailed background and steps to create and manage an SSH RSA public-private key file pair for SSH client connections. すぐに使用できるコマンドについては、Azure での Linux VM 用の SSH 公開/秘密キー ペアの作成方法に関する記事をご覧ください。If you want quick commands, see How to create an SSH public-private key pair for Linux VMs in Azure.

Windows コンピューター上で、SSH キーを生成して使用するその他の方法については、「Azure 上の Windows で SSH キーを使用する方法」を参照してください。For additional ways to generate and use SSH keys on a Windows computer, see How to use SSH keys with Windows on Azure.

SSH とキーの概要Overview of SSH and keys

SSH は、セキュリティで保護されていない接続においてセキュリティで保護されたサインインを可能にする、暗号化された接続プロトコルです。SSH is an encrypted connection protocol that allows secure sign-ins over unsecured connections. SSH は、Azure でホストされる Linux VM の既定の接続プロトコルです。SSH is the default connection protocol for Linux VMs hosted in Azure. SSH 自体は暗号化された接続を提供しますが、SSH 接続でパスワードを使用すると、VM はブルートフォース攻撃やパスワードの推測に対して脆弱になります。Although SSH itself provides an encrypted connection, using passwords with SSH connections still leaves the VM vulnerable to brute-force attacks or guessing of passwords. SSH を使用して VM に接続するためのより安全で推奨される方法は、公開キーと秘密キーのペア (SSH キーとも呼ばれます) を使用する方法です。A more secure and preferred method of connecting to a VM using SSH is by using a public-private key pair, also known as SSH keys.

  • 公開キーは、Linux VM か、公開キー暗号化で使用する他のサービスに配置します。The public key is placed on your Linux VM, or any other service that you wish to use with public-key cryptography.

  • 秘密キーは、ローカル システム上に残ります。The private key remains on your local system. このキーは安全に保管してください。Protect this private key. このキーは共有しないようにしてください。Do not share it.

SSH クライアントを使用してお使いの Linux VM (公開キーがある) に接続するときに、リモート VM ではクライアントをテストして、秘密キーが処理されていることを確かめます。When you use an SSH client to connect to your Linux VM (which has the public key), the remote VM tests the client to make sure it possesses the private key. クライアントに秘密キーがある場合、VM へのアクセス権が付与されます。If the client has the private key, it's granted access to the VM.

組織のセキュリティ ポリシーに応じて、単一の公開キーと秘密キーのペアを再利用して複数の Azure VM とサービスにアクセスできます。Depending on your organization's security policies, you can reuse a single public-private key pair to access multiple Azure VMs and services. アクセスする VM またはサービスごとに異なるキーのペアを用意する必要はありません。You do not need a separate pair of keys for each VM or service you wish to access.

公開キーはだれとでも共有できますが、秘密キーを所有するのは自分 (またはローカル セキュリティ インフラストラクチャ) にする必要があります。Your public key can be shared with anyone, but only you (or your local security infrastructure) should possess your private key.

秘密キーのパスフレーズPrivate key passphrase

SSH 秘密キーには、それを保護するためのセキュリティで高度に保護されたパスフレーズが必要です。The SSH private key should have a very secure passphrase to safeguard it. このパスフレーズは、秘密 SSH キー ファイルにアクセスするためだけのものであり、ユーザー アカウント パスワードでは "ありません"。This passphrase is just to access the private SSH key file and is not the user account password. SSH キーにパスフレーズを追加すると、128 ビット AES を使用して秘密キーが暗号化されるため、暗号化解除するパスフレーズなしでは秘密キーを使用できなくなります。When you add a passphrase to your SSH key, it encrypts the private key using 128-bit AES, so that the private key is useless without the passphrase to decrypt it. 攻撃者によって盗まれた秘密キーにパスフレーズがないと、その秘密キーが使用され、対応する公開キーを持つ任意のサーバーにサインインされてしまいます。If an attacker stole your private key and that key did not have a passphrase, they would be able to use that private key to sign in to any servers that have the corresponding public key. 秘密キーがパスフレーズによって保護されている場合、攻撃者は秘密キーを使用できないため、Azure 上のインフラストラクチャにセキュリティ レイヤーが追加されたことになります。If a private key is protected by a passphrase, it cannot be used by that attacker, providing an additional layer of security for your infrastructure on Azure.

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

Azure は、現在、SSH プロトコル 2 (SSH-2) の RSA 公開キー/秘密キーのペア (最小長: 2048 ビット) をサポートしています。Azure currently supports SSH protocol 2 (SSH-2) RSA public-private key pairs with a minimum length of 2048 bits. その他のキーの形式 (ED25519 や ECDSA など) はサポートされていません。Other key formats such as ED25519 and ECDSA are not supported.

SSH キーの使用方法と利点SSH keys use and benefits

公開キーを指定して Azure VM を作成すると、Azure は公開キーを (.pub の形式で) VM の ~/.ssh/authorized_keys フォルダーにコピーします。When you create an Azure VM by specifying the public key, Azure copies the public key (in the .pub format) to the ~/.ssh/authorized_keys folder on the VM. ~/.ssh/authorized_keys の SSH キーは、クライアントが SSH 接続の対応する秘密キーと一致することを確認するために使用されます。SSH keys in ~/.ssh/authorized_keys are used to challenge the client to match the corresponding private key on an SSH connection. 認証に SSH キーを使用する Azure Linux VM では、Azure は、パスワード サインインを禁止して SSH キーのみを許可するよう SSHD サーバーを構成します。In an Azure Linux VM that uses SSH keys for authentication, Azure configures the SSHD server to not allow password sign-in, only SSH keys. そのため、SSH キーで Azure Linux VM を作成すると、VM の展開をセキュリティで保護し、一般的な展開後の構成手順である sshd_config ファイルでのパスワードの無効化を省略できます。Therefore, by creating an Azure Linux VM with SSH keys, you can help secure the VM deployment and save yourself the typical post-deployment configuration step of disabling passwords in the sshd_config file.

SSH キーを使用したくない場合は、パスワード認証を使うように Linux VM を設定できます。If you do not wish to use SSH keys, you can set up your Linux VM to use password authentication. VM がインターネットに公開されない場合は、パスワードを使用するだけで十分なことがあります。If your VM is not exposed to the Internet, using passwords may be sufficient. ただし、Linux VM ごとにパスワードを管理し、パスワードの最小の長さ、定期的な更新など、優良なパスワードのポリシーと運用を維持する必要があります。However, you still need to manage your passwords for each Linux VM and maintain healthy password policies and practices, such as minimum password length and regular updates. SSH キーを使用すると、複数の VM で別個に資格情報を管理する複雑さが軽減されます。Using SSH keys reduces the complexity of managing individual credentials across multiple VMs.

ssh-keygen でキーを生成するGenerate keys with ssh-keygen

キーを作成するための推奨されるコマンドは ssh-keygen です。このコマンドは、Azure Cloud Shell、macOS、Linux ホスト上の OpenSSH ユーティリティや、Windows Subsystem for Linux、および他のツールで利用できます。To create the keys, a preferred command is ssh-keygen, which is available with OpenSSH utilities in the Azure Cloud Shell, a macOS or Linux host, the Windows Subsystem for Linux, and other tools. ssh-keygen では、一連の質問に答えることによって、秘密キーと対応する公開キーが出力されます。ssh-keygen asks a series of questions and then writes a private key and a matching public key.

SSH キーは既定で ~/.ssh ディレクトリに保持されます。SSH keys are by default kept in the ~/.ssh directory. ~/.ssh ディレクトリがない場合、ssh-keygen コマンドによって、適切なアクセス許可で作成されます。If you do not have a ~/.ssh directory, the ssh-keygen command creates it for you with the correct permissions.

基本的な例Basic example

次の ssh-keygen コマンドは、既定で、2048 ビットの SSH RSA 公開および秘密キー ファイルを ~/.ssh ディレクトリに生成します。The following ssh-keygen command generates 2048-bit SSH RSA public and private key files by default in the ~/.ssh directory. SSH キー ペアが現在の場所にある場合、それらのファイルは上書きされます。If an SSH key pair exists in the current location, those files are overwritten.

ssh-keygen -t rsa -b 2048

詳細な例Detailed example

次の例では、SSH RSA キー ペアを作成するためのその他のコマンド オプションを示します。The following example shows additional command options to create an SSH RSA key pair. SSH キー ペアが現在の場所にある場合、それらのファイルは上書きされます。If an SSH key pair exists in the current location, those files are overwritten.

ssh-keygen \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myprivatekey \
    -N mypassphrase

コマンドの説明Command explained

ssh-keygen = キーの作成に使用するプログラム。ssh-keygen = the program used to create the keys

-t rsa = 作成するキーの種類。この場合は RSA 形式。-t rsa = type of key to create, in this case in the RSA format

-b 4096 = キーのビット数。この場合は 4096。-b 4096 = the number of bits in the key, in this case 4096

-C "azureuser@myserver" = 識別しやすいように公開キー ファイルの末尾に追記されたコメント。-C "azureuser@myserver" = a comment appended to the end of the public key file to easily identify it. 通常はメール アドレスがコメントとして使用されますが、インフラストラクチャに最適な文字列を使用します。Normally an email address is used as the comment, but use whatever works best for your infrastructure.

-f ~/.ssh/mykeys/myprivatekey = 既定の名前を使用しない場合の、秘密キー ファイルのファイル名。-f ~/.ssh/mykeys/myprivatekey = the filename of the private key file, if you choose not to use the default name. .pub を付加された対応する公開キー ファイルが、同じディレクトリに生成されます。A corresponding public key file appended with .pub is generated in the same directory. ディレクトリは存在している必要があります。The directory must exist.

-N mypassphrase = 秘密キー ファイルへのアクセスに使用される追加のパスフレーズ。-N mypassphrase = an additional passphrase used to access the private key file.

ssh-keygen の例Example of ssh-keygen

ssh-keygen -t rsa -b 2048 -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:
14:a3:cb:3e:78:ad:25:cc:55:e9:0c:08:e5:d1:a9:08 azureuser@myserver
The keys randomart image is:
+--[ RSA 2048]----+
|        o o. .   |
|      E. = .o    |
|      ..o...     |
|     . o....     |
|      o S =      |
|     . + O       |
|      + = =      |
|       o +       |
|        .        |
+-----------------+

保存されるキー ファイルSaved key files

Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa

この記事で使用するキー ペアの名前です。The key pair name for this article. 既定では、キー ペアの名前に id_rsa が割り当てられます。秘密キーのファイル名として id_rsa を想定しているツールもあるため、そのようにすることをお勧めします。Having a key pair named id_rsa is the default; some tools might expect the id_rsa private key file name, so having one is a good idea. ディレクトリ ~/.ssh/ は、SSH キー ペアと SSH 構成ファイルの既定の場所です。The directory ~/.ssh/ is the default location for SSH key pairs and the SSH config file. 完全パスで指定されていない場合、ssh-keygen は、既定の ~/.ssh ではなく、現在の作業ディレクトリにキーを作成します。If not specified with a full path, ssh-keygen creates the keys in the current working directory, not the default ~/.ssh.

~/.ssh ディレクトリのリストList of the ~/.ssh directory

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

キーのパスフレーズKey passphrase

Enter passphrase (empty for no passphrase):

秘密キーにはパスフレーズを追加することを "強く" お勧めします。It is strongly recommended to add a passphrase to your private key. キー ファイルを保護するパスフレーズがないと、ファイルを持っている人はだれでも、そのファイルを使用して、対応する公開キーのあるサーバーにサインインすることができます。Without a passphrase to protect the key file, anyone with the file can use it to sign in to any server that has the corresponding public key. パスフレーズを追加すれば、第三者に秘密キー ファイルへのアクセスを許してしまった場合でも、キーを変更する時間ができるので、保護のレベルが上がります。Adding a passphrase offers more protection in case someone is able to gain access to your private key file, giving you time to change the keys.

展開の間にキーを自動生成するGenerate keys automatically during deployment

Azure CLI を使用して VM を作成する場合は、必要に応じて az vm create コマンドを --generate-ssh-keys オプション付きで実行することで、SSH 公開キー ファイルと秘密キー ファイルを作成できます。If you use the Azure CLI to create your VM, you can optionally generate SSH public and private key files by running the az vm create command with the --generate-ssh-keys option. キーは、~/.ssh ディレクトリに格納されます。The keys are stored in the ~/.ssh directory. このコマンド オプションを指定すると、その場所にキーが既に存在している場合でも、キーが上書きされることはありません。Note that this command option does not overwrite keys if they already exist in that location.

VM の展開時に SSH 公開キーを提供するProvide SSH public key when deploying a VM

認証するために SSH キーを使用する Linux VM を作成するには、Azure Portal、CLI、Resource Manager テンプレート、またはその他の方法を使用して VM を作成するときに SSH 公開キーを提供します。To create a Linux VM that uses SSH keys for authentication, provide your SSH public key when creating the VM using the Azure portal, CLI, Resource Manager templates, or other methods. ポータルを使用するときは、公開キー自体を入力します。When using the portal, you enter the public key itself. Azure CLI で既存の公開キーを使用する VM を作成する場合は、az vm create コマンドを --ssh-key-value オプション付きで実行することで、使用する公開キーの値または場所を指定します。If you use the Azure CLI to create your VM with an existing public key, specify the value or location of this public key by running the az vm create command with the --ssh-key-value option.

SSH 公開キーの書式がわからない場合は、次のように cat を実行して公開キーを表示できます。~/.ssh/id_rsa.pub の部分は実際の公開キー ファイルの場所に置き換えてください。If you're not familiar with the format of an SSH public key, you can see your public key by running cat as follows, replacing ~/.ssh/id_rsa.pub with your own public key file location:

cat ~/.ssh/id_rsa.pub

出力は次のようになります (ここで示されている出力は編集されています)。Output is similar to the following (here redacted):

ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver

公開キー ファイルの内容をコピーし、Azure portal または Resource Manager テンプレートに貼り付ける場合は、余分な空白文字をコピーしたり、改行を追加したりしないように注意してください。If you copy and paste the contents of the public key file into the Azure portal or a Resource Manager template, make sure you don't copy any additional whitespace or introduce additional line breaks. たとえば、macOS を使用している場合は、公開キー ファイル (既定では ~/.ssh/id_rsa.pub) を pbcopy にパイプして、内容をコピーできます (xclip など、同じ目的を達成できる Linux プログラムが他にもあります)。For example, if you use macOS, you can pipe the public key file (by default, ~/.ssh/id_rsa.pub) to pbcopy to copy the contents (there are other Linux programs that do the same thing, such as xclip).

複数行形式の公開キーを使う方がよい場合は、前に作成した公開キーから pem コンテナーに RFC4716 形式のキーを生成できます。If you prefer to use a public key that is in a multiline format, you can generate an RFC4716 formatted key in a pem container from the public key you previously created.

既存の SSH 公開キーから RFC4716 形式のキーを作成するには、次のようにします。To create a RFC4716 formatted key from an existing SSH public key:

ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem

SSH クライアントを使用して VM に SSH 接続するSSH to your VM with an SSH client

公開キーを Azure VM に、秘密キーをローカル システム上に配置した状態で、VM の IP アドレスまたは DNS 名を使用して、VM に SSH 接続します。With the public key deployed on your Azure VM, and the private key on your local system, SSH to your VM using the IP address or DNS name of your VM. 次のコマンドの azureusermyvm.westus.cloudapp.azure.com を、管理者のユーザー名と完全修飾ドメイン名 (または IP アドレス) に置き換えてください。Replace azureuser and myvm.westus.cloudapp.azure.com in the following command with the administrator user name and the fully qualified domain name (or IP address):

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

キー ペアを作成する際にパスフレーズを指定した場合は、サインイン プロセス中に入力を求められたら、そのパスフレーズを入力します If you provided a passphrase when you created your key pair, enter the passphrase when prompted during the sign-in process. (サーバーは ~/.ssh/known_hosts フォルダーに追加されます。Azure VM にある公開キーが変更されるかサーバー名が ~/.ssh/known_hosts から削除されるまで、再度接続を求められることはありません)。(The server is added to your ~/.ssh/known_hosts folder, and you won't be asked to connect again until the public key on your Azure VM changes or the server name is removed from ~/.ssh/known_hosts.)

VM が Just-In-Time アクセス ポリシーを使用している場合、VM に接続するにはアクセス権を要求する必要があります。If the VM is using the just-in-time access policy, you need to request access before you can connect to the VM. Just-In-Time ポリシーの詳細については、Just in Time ポリシーを使用した仮想マシン アクセスの管理に関するページを参照してください。For more information about the just-in-time policy, see Manage virtual machine access using the just in time policy.

ssh-agent を使用して秘密キーのパスフレーズを格納するUse ssh-agent to store your private key passphrase

SSH サインインのたびに秘密キー ファイルのパスフレーズを入力しなくて済むように、ssh-agent を使用して秘密キー ファイルのパスフレーズをキャッシュできます。To avoid typing your private key file passphrase with every SSH sign-in, you can use ssh-agent to cache your private key file passphrase. Mac を使用している場合、ssh-agent を呼び出すと、秘密キーのパスフレーズは macOS キーチェーンによって安全に保存されます。If you are using a Mac, the macOS Keychain securely stores the private key passphrase when you invoke ssh-agent.

パスフレーズを対話的に使用する必要がないように、ssh-agentssh-add を確認して使用し、キー ファイルに関する情報を SSH システムに伝えます。Verify and use ssh-agent and ssh-add to inform the SSH system about the key files so that you do not need to use the passphrase interactively.

eval "$(ssh-agent -s)"

ここで、ssh-add コマンドを使用して、ssh-agent に秘密キーを追加します。Now add the private key to ssh-agent using the command ssh-add.

ssh-add ~/.ssh/id_rsa

これで、秘密キーのパスフレーズが ssh-agent に格納されました。The private key passphrase is now stored in ssh-agent.

ssh-copy-id を使用して既存の VM にキーをコピーするUse ssh-copy-id to copy the key to an existing VM

既に VM を作成済みの場合は、次のようなコマンドを使用して、Linux VM に新しい SSH 公開キーをインストールできます。If you have already created a VM, you can install the new SSH public key to your Linux VM with a command similar to the following:

ssh-copy-id -i ~/.ssh/id_rsa.pub azureuser@myserver

SSH 構成ファイルの作成と構成Create and configure an SSH config file

SSH 構成ファイル (~/.ssh/config) を作成して構成すると、ログインを高速化し、SSH クライアントの動作を最適化することができます。You can create and configure an SSH config file (~/.ssh/config) to speed up log-ins and to optimize your SSH client behavior.

次の例で示す簡単な構成を使うと、既定の SSH 秘密キーを使って、特定の VM にユーザーとしてすばやくサインインできます。The following example shows a simple configuration that you can use to quickly sign in as a user to a specific VM using the default SSH private key.

ファイルの作成Create the file

touch ~/.ssh/config

ファイルを編集して新しい SSH 構成を追加するEdit the file to add the new SSH configuration

vim ~/.ssh/config

構成の例Example configuration

ホスト VM に適した構成設定を追加します。Add configuration settings appropriate for your host VM.

# Azure Keys
Host myvm
  Hostname 102.160.203.241
  User azureuser
# ./Azure Keys

追加のホストに構成を追加することで、それぞれが独自の専用キー ペアを使用するようにできます。You can add configurations for additional hosts to enable each to use its own dedicated key pair. 高度な構成オプションについて詳しくは、「SSH config file」(SSH 構成ファイル) をご覧ください。See SSH config file for more advanced configuration options.

SSH キー ペアを作成し、SSH 構成ファイルを構成したので、すばやく安全に Linux VM にサインインできるようになりました。Now that you have an SSH key pair and a configured SSH config file, you are able to sign in to your Linux VM quickly and securely. 次のコマンドを実行すると、SSH は SSH 構成ファイルを探して、その Host myvm ブロックからすべての設定を読み込みます。When you run the following command, SSH locates and loads any settings from the Host myvm block in the SSH config file.

ssh myvm

SSH キーを使用して初めてサーバーにサインインするとき、キー ファイルのパスフレーズを入力するように求められます。The first time you sign in to a server using an SSH key, the command prompts you for the passphrase for that key file.

次の手順Next steps

次のステップでは、新しい SSH 公開キーを使用して Azure Linux VM を作成します。Next up is to create Azure Linux VMs using the new SSH public key. Azure VM は、SSH 公開キーをサインインとして作成した方が、既定のサインイン方法であるパスワードを使って作成するよりも高いセキュリティが得られます。Azure VMs that are created with an SSH public key as the sign-in are better secured than VMs created with the default sign-in method, passwords.