Android端末からのリモート開発環境構築(Remote.it＆Termus)

# 目次
- [はじめに](#はじめに)
- [環境](#環境)
- [構築手順](#構築手順)
- [利用手順](#利用手順)
- [まとめ](#まとめ)

# はじめに

この記事では、Android端末からリモート開発環境を構築する方法について紹介します。リモート開発環境の構築には、Remote.itとTermux、Termiusを使用します。Remote.itは、インターネット経由でデバイスにリモートアクセスするためのサービスであり、TermuxはAndroid端末上で動作するターミナルエミュレータです。TermuxによってAndroid端末にSSHサーバ機能とWake on lan機能を導入し、自宅のUbuntuサーバの起動スイッチとして利用します。
UbuntuサーバにもRemote.itとopensshを導入しておき、起動したらこちらもRemote.itでSSH接続するだけ！

# 環境
   - Android端末１(手持ち)
・Remote.it(Proxyサービス経由でSSHサービス利用)
・Termius(SSHクライアントとして利用)

   - Android端末２(自宅設置のAndroid10 SIM無しWifi接続)
・Remote.it(Proxyサービス経由でSSHサービス受付)
・Termux(SSHサーバ機能とWake on lan機能をインストールするのに利用)

   - デスクトップ(自宅設置）
・Remote.it(Proxyサービス経由でSSHサービス受付)
・openssh

# 構築手順

各端末ごとの構築手順は大体以下の通り。

#### Android端末１の環境構築
１．**Google PlayストアからRemote.itをインストールします。**

https://play.google.com/store/apps/details?id=com.remoteit&hl=ja&gl=US&pli=1

Remote.itにはアカウント登録の必要がありますのでアカウント登録をしてください。
私はGoogleアカウント連携でアカウントを作成しました。
Android端末１はサービスを利用するだけですので、最初はインストールするだけで大丈夫です。

２．**Google PlayストアからTermiusをインストールします。**

https://play.google.com/store/apps/details?id=com.server.auditor.ssh.client&hl=ja&gl=US

３．**Termius(SSHクライアント)で公開鍵認証用の鍵ペアを作成**
　TermiusはSSHクライアントとして利用します。クライアントの公開鍵をSSHサーバとなる
　Android端末２とデスクトップにそれぞれ設置する必要がありますので、まずは鍵ペアを作成

　①Termiuxの左上のメニューから「Keychain」を選択
　②右下の「＋」ボタンを選択し、「Generate Key」を選択
　③「Name」には使用する鍵の名前を任意に設定。「Type」はデフォルトのED25519で問題ありません。
　　「Passphrase」に鍵を利用するためのパスワードを設定し、記録しておいてください。
　④③の設定が終わったら右上のチェックマークを選択し、鍵ペアの作成は完了です。
　⑤Keychain画面に作成した鍵が表示されていますので、作成した鍵を選択
　⑥右上のボタンから「Export to file」など選択し、公開鍵を任意のフォルダに保存し置いてください。
　⑦保存した公開鍵のファイルはUSB接続でも何でもいいのでAndroid端末２とデスクトップにコピー
　　してください。


#### Android端末２の環境構築
１．**Google PlayストアからRemote.itをインストール**
　※Android端末１の時と同様
　Android端末２からはRemote.itを経由してSSHサーバサービスを提供します。
　Android端末１で使用したアカウントと同様のアカウントでRemote.itにログインし
　以下の手順でSSHサーバサービスを設定してください。

　①ログイン後のTOP画面で、「ThisDevice」を選択
　②Remote.it上でデバイスを識別するデバイス名の入力画面に移動しますので
　　任意の名前を入力してください。(デフォルトでOK)
　③リモート接続に提供するサービスの設定画面に移動しますので
　　「Target IP Address」にはWifiに接続で利用しているIPアドレスを入力
　　※私はデフォルトで入力されてました
　　次の項目では「SSH」を選択してください。「Target Port」の項目が22番に設定されますが、
　　Termuxで利用するポートは8022番ですので、「Target Port」は8022に設定します。
　　設定がすべて終わったら、「Start Service」を選択しサービスを開始してください。

２．**スリープをしないように設定**

　Remote.itはAndroid端末２がスリープ状態になると接続が切れてしまいます。常時起動状態とするため
　以下のURLを参考にスリープをしないように設定しました。
　また、電源節約のために画面の明るさを最低にしています。

https://pkunallnet.com/pcinfo/google/androidsleep/

３．**Termuxをapkファイルからインストール**

https://f-droid.org/ja/packages/com.termux/

　Termuxは2023年7月30日現在、Google Playからインストールすることができない状態です。
　上記リンクから自分の動作環境にあったapkファイルをダウンロードし、実行すれば
　アプリのインストールは完了です。
　(私は現状での最新版のバージョン0.118.0をインストールしています。）

４．**TermuxからSSHサーバ機能のインストール**
　Termuxのインストールが完了したら、以下のページを参考にSSHサーバの設定を行ってください。
　以下のページ上では鍵の作成と権限付与を同じ端末上で行っているように見えますが、
　鍵にはAndroid端末１から持ってきた公開鍵を使用してください。
　以下ページでは実行している、鍵をストレージにコピーする手順は必要ありません。

https://qiita.com/dev100kg/items/11fdaac265c35e777664

６．**TermuxからWake on lan機能のインストール**
　SSHでログイン後はwake on lanのマジックパケットを送信する必要がありますので
　以下のコマンドをTermux上で入力し、機能を導入しておきます。

```
apt install wol
```


#### デスクトップの環境設定

１．**SSHサーバの構築**
　SSHサーバの構築についてはググれば情報がいくらでも出てくると思いますので適宜設定してください。
　一応参考までに

https://zenn.dev/uchidaryo/books/ubuntu-2204-server-book/viewer/openssh#openssh%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC

２．**SSHクライアント(Android端末１）の公開鍵の登録**
　Android端末１からコピーしてきた公開鍵ファイルを以下のコマンドでauthorized_keysに追記し、登録してください。
```
$ cat 公開鍵ファイルへのパス >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
```

３．**Remote.itのインストールとSSHサービスの登録**
　以下のページを参考に導入を進めました。

https://support.remote.it/hc/ja/articles/4422713382413-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

https://qiita.com/Brutus/items/81b950119800cfd9599b

　ログインをする際、私はGoogleアカウントアカウントを使っていたので上記手順では
　ログインすることができませんでした。どうやらCLIでGoogleアカウントでのログインを行う際には
　認証情報ファイルを作成する必要があるようです。。

https://docs.remote.it/developer-tools/cli-usage

上記を参考に、以下のコマンドを実行して認証情報を設定し、ログインします。

```remote.itの認証情報の保存場所を作成
$ mkdir -p ~/.remoteit
$ touch ~/.remoteit/credentials
```
```:remote.it 認証情報ファイルを作成
$ remoteit configure
```
```:認証情報ファイルを作成
$ remoteit configure
```
認証情報作成を行うとキー、シークレット、ユーザー定義のプロファイル名を入力するプロンプトが表示されます。
キーがGmeilのアドレス、シークレットがパスワード、プロファイル名は任意・・だったはずです。(うろ覚え)

```:作成された認証情報を利用してログイン
$ remoteit configure --profile <設定したプロファイル名> --enabled
``` 


# 利用手順
１．**Android端末１からAndroid端末２へのRemote.it接続(SSH)**
Android端末１でRemote.itを起動してください。オンラインになっているデバイス名の中にAndroid端末２があるはずです。Android端末２を選択すると、オンラインとなっているSSHが選択可能な状態になっているはずですので選択。
CONNECTを選択して接続をしてください。この時、PORTの設定が8022になっていることを確認してください。接続先にはプロキシのURLが表示されますのでLAUNCHを選択し、Termiusを起動してください。
　
２．Termiusの接続設定
１．手順からTermiusを起動すると、接続のための情報が既に入力されているはずです。Aliasの項目には適当な接続名を設定。Keyの項目を、Android端末１の環境構築の際に作成した公開鍵に変更します。この2点のみを変更すればRemote.it経由でAndroid端末１からAndroid端末２へSSH接続できるはずです。

:::
注意
上記手順で作成した接続は、Remote.itの接続をし直すたびに作成する必要があります。
：::


３．**wake on lanによるデスクトップの起動**
さて、これでAndroid端末２経由でWake on lanを実施する準備ができました。以下のコマンドでデスクトップ端末の電源を入れてください。

```:Termius
$ wol <デスクトップのMACアドレス>
```
MACアドレスの形式は"11:22:33:44:55:66のような感じです。MACアドレスを毎回打つのが面倒なので実行ファイルを作成しておくと便利です。
正常に起動すればRemote.itから機器がオンラインになったことが通知されると思います。

４．**Android端末１からデスクトップへのRemote.it接続(SSH)**
１～２の手順と同様にデスクトップとの接続を実施してください。オンラインのデバイスの中にデスクトップが表れているはずです。
:::note warn
注意
４の手順を実行する前にAndroid端末２との接続を解除しておいてください。同じSSHの接続を同時に行うことはどうやらできないようです。※できる方法知ってる人は教えてください。
:::


# まとめ

Android端末からのリモート開発環境構築を行うために、Remote.itとTermuxの組み合わせを紹介しました。ダメですね。思い付きで初めて記事を書いてみましたが、構築しながらでないとスクリーンショットがなく、わかりづらい上に非常に長々とした文章になってしまいました。画像の加工も面倒ですし。。構築の時間より記事を書く時間の方が長くなってしまったような気がします。

次はリモートで開発をしながらMicroStack上に何かWebシステムを構築したいのですが、何を作ろうかなぁ。