遠隔保守のためAnyDeskをDebian12にインストールする(した)話

# この記事を書くに至った動機

## そもそもは
+ FreePBX17のGA版(正式製品版)がSangoma社が予定した期限内(2024年6月末)にリリースされなかった
+ FreePBX17 BetaをDebian12(GNOMEデスクトップ環境付)上のSnapコンテナ上のDebian12にインストールしたが、最近のアップデート後に酷いバグに遭遇して動かなくなった(正確には、Asteriskは動くので最低限電話機能は使えるが、WebGUI(FreePBX)が使えなくなった)
+ 元々遠隔保守のためAnyDeskを使うことになっており、FreePBX17のGA版リリースと同時に導入記でも書こうかなと思っていた
+ **-> FreePBX17の方が遅延したので記事を一体にする意味がないな？？？？**

## よって、Debian12(GNOMEデスクトップ環境付)にAnyDeskをインストールする(した)記事を単独で出します(血涙)

### 何故AnyDesk？
+ FreePBX17 Betaの動作確認を始めた当初、設置先に対し遠隔保守を行う手段として、VPN、TeamViewer、AnyDeskの選択肢があった
+ 本当はChromeリモートデスクトップが使えたら良かったがLinuxマシンを操作対象として使えなかった
+ VPNは保守が面倒だったりUTMを通過出来ないことがある
+ **-> よってVPNが先ず却下**

### 残るTeamViewerとAnyDeskで実際に動作確認して比較
+ どちらも普通に(？)**大体のファイアウォールを貫通**出来ることを確認した
+ **-> AnyDeskの方が維持費は安い(2024年5月当時)**
+ **-> AnyDeskの方に自動接続受け容れ機能があった(2024年5月当時)**

∴ **AnyDeskを導入する**ことに決した

## 注意事項
+ **本記事は(長いアカウントIDと複雑なパスワードに守られているとは言え)ファイアウォールに穴を空ける行為に他なりません**
+ **セキュリティ的・コンプライアンス的に許される環境かどうか、よくよく考えて実行に移してください**

### 大前提
+ AnyDeskの商用利用可プランの契約方法については本記事では扱わない
+ AnyDeskの操作する側となる端末の設定については本記事では扱わない

### ドキュメント

https://anydesk.com/ja/downloads/linux

上掲の「Use DEB Repository」のリンク先にある手順を参考に作業を進めます

http://deb.anydesk.com/howto.html

ざっと目を通した所(2024年5月時点)、**最新のDebian系OSではエラーが出るやり方なので、以下のようにアレンジします**

```shell
root@FreePBX:~# vi /etc/apt/sources.list
```

/etc/apt/sources.list の末尾に、以下の行を付け加えます

```sh
deb http://deb.anydesk.com/ all main
```

付け加えたら、以下のコマンドを実行します

```shell
root@FreePBX:~# wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | sudo tee /etc/apt/trusted.gpg.d/anydesk.asc
root@FreePBX:~# apt update
root@FreePBX:~# apt install anydesk
```

### AnyDesk(Linux版)に自動接続を許可する設定を入れる

AnyDesk(Linux版)のインストールが完了したら、 [AnyDesk Linux版のコマンドラインインターフェース](https://support.anydesk.com/ja/knowledge/command-line-interface-for-linux) に従って、無人アクセス用のパスワードを設定します

```shell
root@FreePBX:~# echo <VeryStrongPassword> | anydesk --set-password
```

パスワードが設定出来たら、一旦**root及びSSHから抜けて**、Debianのデスクトップ上で端末(Terminal)を起動して、次の通り操作します

```shell
<YourFreePBXNormalUser>@FreePBX:~# sudo anydesk --admin-settings
```

エラーを吐かれつつ下掲の画面が開きますので、**Permission Profile**の項目を「Unattended Access」に切り替えて、「無人アクセスを許可する」にチェックを入れて画面を閉じてください

![スクリーンショット 2024-05-27 15.10.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1861875/28daf1d7-edc7-1b08-f76e-6d798303dd33.png)

端末に戻ったらrootに入り、次のファイルの内容を表示して、次の行の値を控えます

```shell
root@FreePBX:~# cat /etc/anydesk/system.conf
```

```conf
ad.anynet.id=XXXXXXXXXX
```

次に、次のファイルを編集します。

```shell
root@FreePBX:~# vi /etc/gdm3/daemon.conf
```

編集箇所は3行です。以下に挙げる項目のコメントアウトを外して、「AutomaticLogin」の項目には親Debianの通常のログインに使うアカウント名を入力してください

```conf
WaylandEnable=false
  AutomaticLoginEnable = true
  AutomaticLogin = <YourFreePBXNormalUser>
```

編集を終えたら端末（Terminal）から再起動を行います

```shell
root@FreePBX:~# shutdown -r now
```

再起動したら、**親Debianが自動でログインまで行われ**、Debianに設定している既定時間経過すると自動でロックされるかと思います

「操作する側」のAnyDeskで、先ほど控えた値(ad.anynet.idの=より右側の数字)を使ってDebianへ接続を試みます。

![スクリーンショット 2024-05-27 15.49.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1861875/b3a6f614-6003-d1fe-d334-4d4327cb12bf.png)

無人アクセス用に設定したパスワードを設定します(「次回からは自動ログオンする」にチェックを入れるべきかどうかはご自分でご判断をお願いします)

![スクリーンショット 2024-05-27 15.52.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1861875/6c0b79b0-37dd-5c17-920e-719b509e13c5.png)

:::note info
**ロック画面が表示されて、クリックしてパスワード入力画面に切り替わり、かつ正しいパスワードを入力してログインが出来たら成功です**
:::

## 再度注意

当たり前ですが、**この設定はある意味でセキュリティに穴を空ける行為ですので、セキュリティ・コンプライアンスに抵触しないかどうか、厳重に検討した上での作業をお願いします。また、アカウント情報の管理には十分に気を付けてください**


## 所感

### AnyDeskの操作について
+ 画面操作は極めて軽量だと感じる
+ MacからMicrosoft RDPでWindowsを操作する時のようなキーボード配列の相違を気にしなくて良かった
+ 遠隔操作「されている端末」を遠隔で再起動後、自動再接続する機能があって地味に便利

### 端末またはネットワークにVPN接続するのとAnyDesk、どっちが良い？
+ 一長一短だと思う。当たり前だが各種VPNでもAnyDeskでも、不具合が生じて使えなくなる可能性は常にある
+ ただ、VPNで接続する場合は**どこかで接続点となるインフラを整備しなくてはならない**ので、正直自分ひとりで維持していくのは大変
+ また、VPNで接続する場合は(顧客)環境毎にネットワークを分離する必要がある
+ **-> 管理対象が増えて煩雑**
+ AnyDeskとかTeamViewerとかのリモートデスクトップソフトウェア一本に絞って管理対象を集約するのは選択肢の一つとしてアリだと思う
+ 駄菓子菓子、**これらのインフラの健全性が(不正アクセス等で)破壊された場合の被害も大きいので、適切なアカウント管理が求められるのは言うまでも無い**
+ また、このような便利なサービスがあればVPNの需要が無くなるか？というとそれはまた別の話になるので、**技術的にはどんなサービスの設定方法も覚えておいて損はしない**