次の方法で共有


Azure Linux VM に対する SSH 接続の失敗、エラー、拒否のトラブルシューティング

適用対象: ✔️ Linux VM

この記事は、Linux 仮想マシン (VM) に接続しようとしたときに、Secure Shell (SSH) エラー、SSH 接続エラー、または SSH の拒否により発生する問題を見つけて修正するために役立ちます。 Azure Portal、Azure CLI、または Linux 用の VM アクセス拡張機能を使用して、接続の問題を解決できます。

Note

この記事は役に立ちましたか? あなたの入力は私たちにとって重要です。 このページの Feedback ボタンを使用して、この記事がどれだけうまく機能したか、または改善方法をお知らせください。

簡単なトラブルシューティング手順

トラブルシューティングの各手順を実行した後、VM に再接続してみてください。

  1. SSH 構成をリセットします
  2. ユーザーの資格情報をリセットします
  3. 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 のロールの割り当てを構成するを参照してください。
  4. VM リソースの正常性を確認します。
    • VM が正常であると報告されていることを確認します。
    • ブート診断を有効にしている場合は、VM のブート エラーがログに報告されていないことを確認します。
  5. VM を再起動します
  6. 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 を選択します。 Help セクションまで下にスクロールし、次の例のように Reset password を選択します。

Azure portal で S S H の構成または資格情報をリセットするスクリーンショット。

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 コマンドをルートとして使用するか、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 portal で仮想マシンを再起動するスクリーンショット。

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 を選択し、 Help セクションまで下にスクロールします。 次の例のように、[再デプロイ] を選択します。

Azure portal で仮想マシンを再デプロイするスクリーンショット。

Azure CLI

次の例では、az vm redeploy を使用して、myResourceGroup という名前のリソース グループ内にある myVM という名前の VM を再デプロイします。 実際の値を次のように使用します。

az vm redeploy --resource-group myResourceGroup --name myVM

その他のリソース

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。