Azure Arc を利用して サーバに SSH でリモートアクセスする
azure arc
Published: 2022-04-24

Azure CLI がインストールされている端末から、Azure Arc-enabled Server に登録したサーバに対して SSH で接続できる機能がプレビューになったので試してみました。

準備(Azure 側)

Azure CLI にログインするアカウントに Virtual Machine Local User Login の権限を付与します。今回の検証では所有者の権限を有するアカウントを使います。

リソースプロバイダを登録します

az provider register -n Microsoft.HybridConnectivity

Azure CLI に拡張機能を追加します。

az extension add --name ssh

SSH で接続したいサーバにエンドポイントを設定します。

az rest --method put --uri https://management.azure.com/subscriptions/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/akshci-eu/providers/Microsoft.HybridCompute/machines/omprewin01/providers/Microsoft.HybridConnectivity/endpoints/default?api-version=2021-10-06-preview --body "{\"properties\": {\"type\": \"default\"}}"

準備(サーバ側)

1.13.21320.014 以上の Connected Machine Agent をインストールします

PS C:\Users\Administrator> & 'C:\Program Files\AzureConnectedMachineAgent\azcmagent.exe' version
azcmagent version  1.17.01931.201

Arc-enabled server なサーバ上で sshd を起動します。

PS C:\Users\Administrator> Get-Service -Name "sshd"

Status   Name               DisplayName
------   ----               -----------
Running  sshd               OpenSSH SSH Server

Connected Machine Agent に SSH のポートを登録します。

PS C:\Users\Administrator> & 'C:\Program Files\AzureConnectedMachineAgent\azcmagent.exe' config set incomingconnections.ports 22
Config property incomingconnections.ports set to value [22] (previously [])
PS C:\Users\Administrator> & 'C:\Program Files\AzureConnectedMachineAgent\azcmagent.exe' config list
Local Configuration Settings
  incomingconnections.ports (preview)  : [22]
  proxy.url                            :
  extensions.allowlist                 : []
  extensions.blocklist                 : []
  proxy.bypass                         : []
  guestconfiguration.enabled           : true
  extensions.enabled                   : true
PS C:\Users\Administrator>

接続

az ssh arc コマンドを利用します。az ssh vm でも OK です。今回は CloudShell からオンプレミスのサーバに SSH で接続してみます。認証方式はローカルユーザの資格情報です。

参考:az ssh arc

@Azure:~$ az ssh arc -n omprewin01 -g akshci-eu --local-user administrator
administrator@omprewin01s password:

Microsoft Windows [Version 10.0.20348.587]
(c) Microsoft Corporation. All rights reserved.

administrator@OMPREWIN01 C:\Users\Administrator>

特にトラブルもなくつながりました。ホスト名からして、確かに Azure Arc-enabled Server に登録したオンプレミスのサーバにつながっているようです。

administrator@OMPREWIN01 C:\Users\Administrator>hostname
omprewin01

netstat で見る限りでは、Azure Arc で利用している Azure Hybrid Instance Metadata Service (himds) がサーバの sshd に接続しているようです。

administrator@OMPREWIN01 C:\Users\Administrator>netstat -abno | find "22" 
  TCP    0.0.0.0:22             0.0.0.0:0              LISTENING       1696
  TCP    [::]:22                [::]:0                 LISTENING       1696
  TCP    [::1]:22               [::1]:52928            ESTABLISHED     1696
  TCP    [::1]:52928            [::1]:22               ESTABLISHED     2180
  UDP    0.0.0.0:60223          *:*                                    1172
  UDP    [::]:60223             *:*                                    1172

administrator@OMPREWIN01 C:\Users\Administrator>tasklist

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
(中略)
himds.exe                     2180 Services                   0     23,104 K
gc_service.exe                2644 Services                   0     19,376 K
gc_service.exe                2748 Services                   0     18,492 K
(中略)
sshd.exe                      1696 Services                   0      6,232 K
sshd.exe                       416 Services                   0      7,920 K
sshd.exe                      3640 Services                   0      8,000 K
(中略)

現時点で、監査ログには Azure Arc で SSH 接続したことを明確に示すログが残らないようです。推測できそうなログは出ていますが、SSH で接続した回数とログの件数が一致していません。GA の時にはアクセスを明確に示すログが残るようになってほしい…

検証中の監査ログ

まとめ

プレビューになった Azure Arc-enabled Server への SSH アクセスを試しました。この機能を利用すると、とても気軽に Azure Arc-enabled Servers にリモートアクセスできます。「オンプレミスのサーバ1台を Azure Arc-enabled Server に登録してリモートアクセス用の踏み台サーバにする」という使い方もできそうですね。