LinuxベースのAzure App Serviceでは、WebベースのSSHで接続してLinuxのコマンドを実行できる。その方法と注意点を説明する。
対象:Azure App Service on Linux、Azureポータル
Linuxベースの「Azure App Service」(App Service on Linux)を使っていて、Azureポータルなどでは不可能なLinuxそのものに対する細かい操作をしたくなったことはないだろうか?
あるいは、Linux VM(仮想マシン)でよく実行するコマンドラインを、App ServiceのLinuxコンテナに対して実行したい、ということもあると思う。
App Service on Linuxでも、SSHで接続してコンソールを開き、任意のコマンドラインを実行することは(多少の制限はあっても)可能だ。本Tech TIPSでは、App Service on Linuxを対象として、WebベースのSSHで接続する方法と注意点を説明する。
以下では、Webブラウザを用いてWebベースのSSHでApp Serviceに接続する手順を説明する(いわゆるSSHクライアントアプリは使わない)。
以下のURLをWebブラウザのアドレスバー(オムニボックス)に直接指定してSSH画面を開くこともできる。
https://<App Service名>.scm.azurewebsites.net/webssh/host
WebブラウザにAzureのアカウント(MicrosoftアカウントあるいはEntra ID/Azure ADアカウント)でサインインしていない場合、ここで認証画面が表示されるので、対象のApp Serviceを管理できる権限を持ったアカウントでサインインすること。
SSHで入力したコマンドラインやその実行結果の出力をログファイルに記録することも可能だ。
Azureポータルには、MicrosoftアカウントあるいはEntra ID/Azure ADアカウントでの認証が必須とはいえ、全世界から接続できる。そのAzureポータル上で利用できるSSHについても、デフォルトでは全世界から接続可能だ。
それが不安だという場合は、ソースIPアドレスでSSH接続を制限できる。つまり、特定のIPアドレスからの接続要求のみ許可し、その他からは拒否する、ということが可能だ。ただし、SSH以外の「高度なツールサイト」も同じく制限される。
具体的な設定手順については、Tech TIPS「【Azure】App Serviceの『高度なツールサイト』をIPアドレス制限で守る(リソーステンプレート編)」を参照していただきたい。
SSHでApp Serviceに接続した場合、printenvコマンドなどで環境変数を表示させると、そこに記載されているパスワードなどの認証情報が平文で表示されてしまう。
Tech TIPS「【Azure Key Vault】App Serviceのアプリケーション設定から『シークレット』な情報が漏れないようにする(Azureポータル編)」で説明しているように、Key Vaultを利用することで、Azureポータルを参照できても認証情報は見せないようにできる。
しかし、この手法ではSSH接続時に認証情報を隠ぺいできず、前述のように平文で確認できてしまう。
そのため、SSHを含む「高度なツールサイト」へのアクセス許可を与える際には、情報漏えいにつながらないかどうか十分注意した方がよいだろう。
App Serviceでは、[/home]ディレクトリ以下のファイルだけが永続的に保持される。一方、[/etc]など他のディレクトリについては、SSH接続中にいろいろ修正したとしても、コンテナのデプロイ時に元の状態へ戻ってしまう。App Serviceの再起動でも、コンテナが再デプロイされるため、同様に[/home]以外の改変は元に戻される。
そのため、SSHで改変したファイルを一時的ではなくずっと残しておきたい場合、[/home]以下に配置する必要がある。
App Service on Linuxは意図せぬタイミングで再起動が掛かることがある。例えばオートヒール(自動回復)機能を「オン」にしていると、指定の条件が満たされたときに自動で再起動が行われる。
すると、SSH接続のセッションも切断されてしまう。しかも、そのまま待っていても自動的には再接続されず、Webブラウザで再読み込み([F5]キーあるいは[Ctrl]+[R]キーを押す)を実行する必要がある。
■関連リンク
Copyright© Digital Advantage Corp. All Rights Reserved.