Azure Linux VM に対する SSH 接続の失敗、エラー、拒否のトラブルシューティング
適用対象: ✔️ Linux VM
この記事は、Linux 仮想マシン (VM) に接続しようとしたときに、Secure Shell (SSH) エラー、SSH 接続エラー、または SSH の拒否により発生する問題を見つけて修正するために役立ちます。 Azure Portal、Azure CLI、または Linux 用の VM アクセス拡張機能を使用して、接続の問題を解決できます。
Note
この記事は役に立ちましたか? あなたの入力は私たちにとって重要です。 このページの Feedback ボタンを使用して、この記事がどれだけうまく機能したか、または改善方法をお知らせください。
簡単なトラブルシューティング手順
トラブルシューティングの各手順を実行した後、VM に再接続してみてください。
- SSH 構成をリセットします。
- ユーザーの資格情報をリセットします。
- network セキュリティ グループ規則で SSH トラフィックとロールの割り当てが許可されていることを確認します。
- SSH トラフィックを許可するネットワーク セキュリティ グループ規則が存在することを確認します (既定では TCP ポート 22)。
- ポートのリダイレクト/マッピングは、Azure Load Balancer なしでは使用できません。
- MICROSOFT Entra ID を使用して SSH ログインを管理する場合は、VM とそれに関連付けられているリソースを含むリソース グループに対して、ユーザーに Virtual Machine Administrator Login または Virtual Machine User Login ロールが割り当てられている必要があります。 それ以外の場合は、"アクセス許可が拒否されました (publickey)" エラーが表示されます。 詳細については、「 Microsoft Entra ログインを使用する VM のロールの割り当てを構成するを参照してください。
- VM リソースの正常性を確認します。
- VM が正常であると報告されていることを確認します。
- ブート診断を有効にしている場合は、VM のブート エラーがログに報告されていないことを確認します。
- VM を再起動します。
- VM を再デプロイします。
詳しいトラブルシューティング手順と説明を引き続きお読みください。
SSH 接続の問題をトラブルシューティングするために使用できる方法
次のいずれかの方法を使用して、資格情報と SSH 構成のリセット、または SSH サービスの状態のトラブルシューティングを行うことができます。
- Azure Portal - SSH 構成または SSH キーをすばやくリセットする必要があり、Azure ツールをインストールしていない場合に最適です。
- Azure VM シリアル コンソール - VM シリアル コンソールは、SSH 構成に関係なく動作し、VM への対話型コンソールを提供します。 実際に、シリアル コンソールは、"SSH 接続できない" 状況の解決を支援するように設計されています。 詳しくは、以下をご覧ください。
- Azure portal からコマンドの実行を使用する - Azure portal からコマンドの実行機能を使用して基本的なコマンドを実行できます。 出力はポータルに返されます。
- Azure CLI - 既にコマンド ラインにいる場合は、SSH 構成または資格情報をすばやくリセットします。
- Azure VMAccessForLinux 拡張機能 - json 定義ファイルを作成して再度使用して、SSH 構成またはユーザーの資格情報をリセットします。
トラブルシューティングの各手順を実行した後、再度 VM に接続してみてください。 それでも接続できない場合は、次の手順をお試しください。
Azure portal を使用する
Azure Portal では、ローカル コンピューターへのツールのインストールなしで SSH 構成またはユーザーの資格情報を簡単にリセットできます。
まず Azure portal で VM を選択します。 次の例のように、[ヘルプ] セクションまで下にスクロールし、[パスワードのリセット] を選択します。
SSH 構成をリセットする
SSH 構成をリセットするには、上のスクリーンショットのように [モード] セクションで Reset configuration only
を選択してから [更新] を選択します。 この操作を完了したら、VM にもう一度アクセスしてみます。
ユーザーの SSH 資格情報をリセットする
既存のユーザーの資格情報をリセットするには、上のスクリーンショットのように [モード] セクションで Reset SSH public key
または Reset password
を選択します。 ユーザー名と、SSH キーまたは新しいパスワードを指定し、 [更新] を選択します。
このメニューから、VM に対して sudo 特権を持つユーザーを作成することもできます。 新しいユーザー名と、関連付けられているパスワードまたは SSH キーを入力し、 [更新] を選択します。
セキュリティ規則を確認する
IP フロー検証を使用して、ネットワーク セキュリティ グループ規則によって、仮想マシンから送受信されるトラフィックがブロックされていないかどうかを確認します。 有効なセキュリティ グループ規則を確認して、SSH ポート (既定では 22) に対して受信 "許可" NSG 規則が存在し、優先されていることを確認することもできます。 詳細については、「有効なセキュリティ規則を使用した VM トラフィック フローのトラブルシューティング」を参照してください。
ルーティングを確認する
Network Watcher の次ホップ機能を使用して、ルートが仮想マシンとの間でトラフィックのルーティングを妨げていないことを確認します。 有効なルートを見直し、ネットワーク インターフェイスのすべての有効なルートを確認することもできます。 詳細については、「有効なルートを使用した VM トラフィック フローのトラブルシューティング」を参照してください。
Azure VM シリアル コンソールの使用
Azure VM シリアル コンソールでは、Linux 仮想マシンのテキスト ベースのコンソールにアクセスできます。 コンソールを使用して、対話型シェル内で SSH 接続のトラブルシューティングを行うことができます。 シリアル コンソールを使用するための前提条件を満たしていることを確認し、次のコマンドを試して SSH 接続のトラブルシューティングをさらに行います。
SSH が実行されていることを確認する
サービスの状態を確認するには、次のコマンドを使用します。これは、現在のほとんどの Linux ディストリビューションで使用できます。
sudo systemctl status sshd.service
次の出力例を参照してください。 出力の Active
行からサービスの状態を確認します。 出力には、リッスンされているポートと IP アドレスも表示されます。
user@hostname:~$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-06-23 17:44:36 UTC; 1 day 3h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 829 (sshd)
Tasks: 1 (limit: 9535)
Memory: 5.1M
CGroup: /system.slice/ssh.service
└─829 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Jun 23 17:44:35 ubu2004 systemd[1]: Starting OpenBSD Secure Shell server...
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on 0.0.0.0 port 22.
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on :: port 22.
Jun 23 17:44:36 ubu2004 systemd[1]: Started OpenBSD Secure Shell server.
このコマンドが使用できない場合、または予期しない結果が返される場合は、他の使用可能なコマンドを使用してください。 ss
コマンドを root として、または sudo
コマンドを介して使用して、SSH サービスが VM で実行されているかどうかを確認できます。
次の例は、sudo
を介して ss
コマンドを実行する方法を示しています。
sudo ss --listen --tcp --process --numeric | grep sshd
Note
netstat
コマンドは非推奨であり、最新のディストリビューションでは常に使用できるとは限らないため、ss
コマンドをお勧めします。
出力がある場合は、SSH が稼働しています。 次の出力例を参照してください。
$ sudo ss -ltpn | grep sshd
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=829,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=829,fd=4))
-ltpn
は、--listen --tcp --process –numeric
引数の短縮形です。 出力は、SSHD プロセス 829 が IPv4 アドレスと IPv6 アドレスの両方をリッスンしていることを示しています。
SSH が実行されているポートの確認
上記のコマンド出力は、SSHD プロセスがポート 22 でリッスンしていることを示しています。 SSHD プロセスが別のポートで実行するように構成されている場合、そのポートが出力に表示されます。 標準構成ファイルで変更が行われたかどうかを確認するには、次のいずれかのコマンドを使用して、既定の構成ファイル /etc/ssh/sshd_config を調べます。
grep -i port /etc/ssh/sshd_config
または
grep -i listen /etc/ssh/sshd_config
出力は次のようになります。
Port 22
出力で #
で始まる行はコメントであり、無視しても問題ありません。 何も返されない場合、または行がコメントの場合は、既定の構成が使用されます。 既定の設定では、システムのすべての IP アドレスをポート 22 でリッスンします。
Azure portal からコマンドの実行を使用する
認証に SSH キーのみが使用されている場合など、シリアル コンソールからコマンドを実行できない場合は、コマンドの実行機能を使用してコマンドを発行し、出力を表示できます。 以前にシリアル コンソールから実行されたすべてのコマンドは、Azure portal の [コマンドの実行] セクションで非対話的に実行できます。 出力は Azure portal に返されます。 コマンドの実行コンテキストでコマンドを実行するために sudo
を使用する必要はありません。
Azure CLI の使用
まだインストールしていない場合は、最新の Azure CLI をインストールし、az login を使用して Azure アカウントにサインインします。
カスタム Linux ディスク イメージを作成してアップロードしている場合は、Microsoft Azure Linux Agent のバージョン 2.0.5 以降がインストールされていることを確認します。 ギャラリー イメージを使用して作成された VM の場合、このアクセス拡張機能は既にインストールされ、自動的に構成されています。
SSH 構成をリセットする
最初に SSH 構成を既定値にリセットして、VM 上の SSH サーバーを再起動します。 ユーザー アカウントの名前、パスワード、または SSH キーは変更されません。
次の例は、az vm user reset-ssh を使用して、myResourceGroup
にある myVM
という名前の VM で SSH 構成をリセットします。 実際の値を次のように使用します。
az vm user reset-ssh --resource-group myResourceGroup --name myVM
ユーザーの SSH 資格情報をリセットする
次の例は、az vm user update を使用して、myResourceGroup
にある myVM
という名前の VM で、myUsername
の資格情報を myPassword
に指定された値にリセットします。 実際の値を次のように使用します。
az vm user update --resource-group myResourceGroup --name myVM \
--username myUsername --password myPassword
SSH キー認証を使用している場合は、特定のユーザーの SSH キーをリセットできます。 次の例では、az vm access set-linux-user を使用して、myResourceGroup
内の myVM
という名前の VM で、myUsername
という名前のユーザー用に ~/.ssh/id_rsa.pub
に保存された SSH キーを更新します。 実際の値を次のように使用します。
az vm user update --resource-group myResourceGroup --name myVM \
--username myUsername --ssh-key-value ~/.ssh/id_rsa.pub
VMAccess 拡張機能を使用する
Linux 用の VM アクセス拡張機能は、実行するアクションを定義する json ファイルを読み込みます。これらのアクションには、SSHD のリセット、SSH キーのリセット、またはユーザーの追加が含まれます。 Azure CLI を使用して VMAccess 拡張機能を呼び出すこともできますが、json ファイルは、必要であれば複数の VM で再利用できます。 この方法では、特定のシナリオで呼び出すことができる json ファイルのリポジトリを作成できます。
SSHD のリセット
次の内容を含む settings.json
という名前のファイルを作成します。
{
"reset_ssh":True
}
Azure CLI を使用した後、json ファイルを指定して VMAccessForLinux
拡張機能を呼び出すことで SSHD 接続をリセットできます。 次の例は、az vm extension set を使用して、myResourceGroup
にある myVM
という名前の VM で SSHD をリセットします。 実際の値を次のように使用します。
az vm extension set --resource-group philmea --vm-name Ubuntu \
--name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json
ユーザーの SSH 資格情報をリセットする
SSHD が正しく機能しているように思える場合は、特定のユーザーの資格情報をリセットできます。 ユーザーのパスワードをリセットするには、settings.json
という名前のファイルを作成します。 次の例では、myUsername
の資格情報を、myPassword
に指定された値にリセットします。 次の行を、実際の値を使用して settings.json
ファイルに入力します。
{
"username":"myUsername", "password":"myPassword"
}
ユーザーの SSH キーをリセットするには、まず settings.json
という名前のファイルを作成します。 次の例では、myUsername
の資格情報を、myResourceGroup
内の myVM
という名前の VM で myPassword
に指定された値にリセットします。 次の行を、実際の値を使用して settings.json
ファイルに入力します。
{
"username":"myUsername", "ssh_key":"mySSHKey"
}
json ファイルを作成したら、Azure CLI でその json ファイルを指定して VMAccessForLinux
拡張機能を呼び出すことで、SSH ユーザーの資格情報をリセットします。 次の例では、myResourceGroup
内の myVM
という名前の VM の資格情報をリセットします。 実際の値を次のように使用します。
az vm extension set --resource-group philmea --vm-name Ubuntu \
--name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json
SSH 構成をリセットする
SSHD 構成自体が正しく構成されていない、またはサービスでエラーが発生した可能性があります。 SSHD をリセットして、SSH 構成自体が有効かを確認します。 最初に実行する必要があるトラブルシューティング手順は、SSHD をリセットすることです。
次の例では、myResourceGroup
という名前のリソース グループ内にある myVM
という名前の VM の SSHD をリセットします。 実際の VM とリソース グループ名を次のように使用します。
azure vm reset-access --resource-group myResourceGroup --name myVM \
--reset-ssh
ユーザーの SSH 資格情報をリセットする
SSHD が正しく機能しているように思える場合は、特定のユーザーのパスワードをリセットできます。 次の例では、myUsername
の資格情報を、myResourceGroup
内の myVM
という名前の VM で myPassword
に指定された値にリセットします。 実際の値を次のように使用します。
azure vm reset-access --resource-group myResourceGroup --name myVM \
--user-name myUsername --password myPassword
SSH キー認証を使用している場合は、特定のユーザーの SSH キーをリセットできます。 次の例では、myResourceGroup
内の myVM
という名前の VM で、myUsername
という名前のユーザー用に ~/.ssh/id_rsa.pub
に保存された SSH キーを更新します。 実際の値を次のように使用します。
azure vm reset-access --resource-group myResourceGroup --name myVM \
--user-name myUsername --ssh-key-file ~/.ssh/id_rsa.pub
VM の再起動
SSH 構成とユーザーの資格情報をリセットした場合、またはその際にエラーが発生した場合は、根本的なコンピューティングの問題に対処するために VM の再起動を試すことができます。
Azure portal
Azure portal を使用して VM を再起動するには、次の例のように、VM を選択して [再起動] を選択します。
Azure CLI
次の例では、az vm restart を使用して、myResourceGroup
という名前のリソース グループ内にある myVM
という名前の VM を再起動します。 実際の値を次のように使用します。
az vm restart --resource-group myResourceGroup --name myVM
VM を再デプロイする
Azure 内で VM を別のノードに再デプロイすると、基になるネットワーク問題を修正する場合があります。 VM の再デプロイについては、「新しい Azure ノードへの仮想マシンの再デプロイ」を参照してください。
Note
この操作を行うと、一時ディスクのデータが失われ、仮想マシンに関連付けられている動的 IP アドレスが更新されます。
Azure portal
Azure portal を使用して VM を再デプロイするには、VM を選択し、[ヘルプ] セクションまで下にスクロールします。 次の例のように、 [再デプロイ] を選択します。
Azure CLI
次の例では、az vm redeploy を使用して、myResourceGroup
という名前のリソース グループ内にある myVM
という名前の VM を再デプロイします。 実際の値を次のように使用します。
az vm redeploy --resource-group myResourceGroup --name myVM
その他のリソース
- 上記の手順を実行しても VM に SSH 接続できない場合は、「SSH の詳細なトラブルシューティング手順」を参照して、問題を解決するための追加の手順を確認します。
- アプリケーションへのアクセスのトラブルシューティングに関する詳細については、「Linux Azure 仮想マシンにおけるアプリケーション接続の問題のトラブルシューティング」を参照してください。
- クラシック デプロイ モデルを使用して作成された仮想マシンのトラブルシューティングの詳細については、 Linux ベースの仮想マシンのパスワードまたは SSH をリセットする方法に関するページを参照してください。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。