2025-05-22

楽天 Link に格安で留守電話機能を実現する

 

楽天 Link の留守電サービスは現在有料で 330円/月額 が必要です。

 

通話転送は現時点では無料です。

 

 

2025年2月28日までは Fusion IP Phone SMART に通話転送すれば月額無料(初期費用なし)で留守番電話が可能でした。

 

現在はこの仕組みは使えません。

 

 

そこでなるべく安く留守番電話を可能にするため、次のような流れで処理します。

 



別スマホ/タブレットは SIM 不要(WiFi でよい)


 

 

個人向けの 050 IP 電話は、ブラステル/ G-Call050 / LaLa Call がありますが、G-Call050 は月額利用料が 308円、LaLa Call は7月から月額利用料が 429円 と高く、また SIP 情報が非開示なのでこの仕組みは使えません。

 

したがってブラステル一択になります。

 

 

 

アプリとして次のものを使います(MacroDroid 以外は無料版で OK)。

 

Livytalk(留守録機能の付いたソフトフォンアプリ)

Autosync for Google Drive または Foldersync

   (フォルダ/ファイルの同期用)

MacroDroid(主スマホへの通知処理と別スマホへの通知削除処理)

Pushbullet(別スマホから主スマホへの通知)

IFTTT(留守録ファイルを添付して Gmail 送信)

   主スマホに Gmail 受信し、添付ファイルを再生できる

   Google Drive 上の留守録ファイル再生もできる

 

 

 

 

1.主スマホの楽天 Link に着信

      任意の秒数呼び出し後、050 IP 電話番号に通話転送する

 

2.050 IP 電話は LivyTalk アプリで受け、すぐに留守電になる設定

      LivyTalk アプリの留守電話機能で留守録する

      さらに MacroDroid で留守録開始をトリガーにし通知をする

      (Pushbullet で主スマホに通知)

 

      Pushbllet による通知はなくても IFTTT による Gmail 送受信で通知相当になる
      (この場合 MacroDroid と Pushbullet は要らない)

 

 

      また、IFTTT を使い Google Drive の所定フォルダに留守録ファイルが
      格納されたことを契機に Gmail を送信する

      (主スマホにメールが届いて留守録がわかる)

 


 

3.LivyTalk の留守録ファイルは Google Drive のフォルダと同期

      同期用アプリにより自動同期する

      同期用アプリは Autosync for Google Drive または Foldersync を使います

 

      同期用アプリの「インスタント同期」機能により、留守録ファイルが追加
      されるとすぐに同期される(Google Drive にアップロードされる)

 


 

 

4.主スマホでは Gmail に添付された留守録ファイル(赤く囲んで示した箇所)
      または Google Drive に同期格納された留守録ファイルを再生できる

 


 

 

ブラステルは月額換算 92円と安いのですが、最初に設定費と 6ヶ月分の維持費が必要で 1,100円かかります。

 

また、最低限のチャージが 2,000円ですので結局一時的に 2,000円必要です。

 

最初に引かれる 1,100円の残り 900円は次の 6ヶ月分の維持費(つまり 1年分)として使用でき、350円が通話料として残りますし、さらに次の 6ヶ月分の維持費の一部に充てることもできます。

 

     

 

さらに 留守録フォルダ内の留守録ファイルを Google Drive と同期させるには、Autosync for Google Drive や Foldersync が必要です。

 

LivyTalk の留守録ファイルは次の場所にありますが、格納場所の変更はできません。

 

/mnt/sdcardAndroiddatajp.co.softfront.livytalk filesLivyTalk

 

ちなみに LivyTalk アプリの留守録タブで再生できる留守録はアプリ内のストレージにあって、ファイルマネージャーなどで見ることはできません。

 

つまりアプリ自体の留守録と、留守録ファイルの2箇所にあるようです。

 

 

フォルダに格納された留守録ファイルを Google Drive のフォルダ(任意名)に自動同期(ファイルアップロード)させます。

 

 

インスタント同期」機能がオンならば新しい留守録ファイルは Google Drive に即座に追加(同期)されます。

 

 

この「インスタント同期」は Autosync for Google DriveFoldersync も Android10 以前でなければ機能しません。

 

Autosync for Google Drive は「インスタントアップロード」なので
    LivyTalk フォルダ > Google Drive への一方向の同期です

 

※ Foldersync は「インスタント同期」なので両方向の同期が可能です

 

一方向でもいいのですが、Google Drive 上のファイル削除が LivyTalk のフォルダからも削除されるかどうかの違いがあります

 

 

インスタント同期」機能を有効にするには有料版の Autosync for Google Drive または Foldersync が必要ですが、Android 11以降の場合は /mnt/sdcard/Android(Scoped storage)配下のフォルダのアクセス制限がされていて、有料版であっても「インスタント同期」が機能しません。 

 

手動同期またはスケジュールによる同期は有効のようですから、短い間隔(最小5分)の同期設定をするしかありません。

 

adb コマンドでインスタント同期が機能するかも知れないとの AI のご宣託がありましたので下記 adb コマンドを打って Foldersync を再起動しましたが、残念ながら機能しません。

 

~ % adb shell appops set --uid dk.tacit.android.foldersync.full MANAGE_EXTERNAL_STORAGE allow 

 

ですので、インスタント同期を機能させるには Android10 以前のスマホが必要です。

 

 

ウチでは UMIDIGI S5 Pro(Android 10)があり「インスタントアップロードまたはインスタント同期」が可能です。

 

 

別スマホは留守録のために使用するので、少し古いスマホで十分で、常に家に置いておけば結構です。

 

 

主スマホは持ち歩いて、着信に出られるときは応答し、出らればければ放置すれば 050 IP 電話に転送されて留守録されます。

 

 

留守録をトリガーに MacroDroid により主スマホにPushbullet で通知および、IFTTT でメールしますので、あとで留守録ファイルの入った(同期された)Google Drive の当該フォルダ内の留守電を再生して聞くことができます。

 

 

月額 92円で留守番電話が可能になります。

 

 

 

 

 

 

 

 

 

 

2025-05-16

楽天モバイルの留守番電話サービスが有料 ⇨ 無料で代替できないか

 

2024年12月1日から留守番電話サービスが月額 330円と、有料になっています。

 

それまで無料だったので使っていましたが、留守電にメッセージを残さずにそのまま切ってしまう人たちがいて、実質的にあまり機能していません。

 

なのでワタシの場合、留守番電話サービスは使わなくても困ることはありません。

 

着信履歴から折り返しかける人を吟味してかけ直せば済むのです。

 

 

 

とはいえ、留守番電話を必要とする人たちもいるでしょう。

 

 

そこで、無料で代替できるやり方をいくつか紹介します。

 

 

1.一部端末に備わっている「伝言メモ」機能を使う

      AQUOS や Arrows、Xperia の一部機種に備わっていますがこれら以外
      のスマホには伝言メモ相当アプリはなく Google Store にもありません

      無料で留守録できますが、一般的な解決策にはなりません

 

 

2.留守電機能のある 050 IP 電話に転送し、そちらで留守録音する

      Fusion IP Phone SMART が最適な 050 IP 電話だったのですが、
      残念なことに 2025年2月28日を以てサービス終了になっています

 

      無料で代替できる 050 IP 電話サービスは現在はありません

 

      有料の 050 IP 電話サービスには My 050(ブラステル)LaLa Call
      G-Call050 が個人向けサービスとして存在します。

 

【050 IP 電話比較表】 


      月額料金を考えると My050 一択でしょう

 

 

3.iPhone の場合、ライブ留守電機能を使う

 

 

4.Pixel の場合、スクリーニング機能を使う

 

ーーーーーーーーーーーーーーーーーーーー

 

Fusion IP Phone SMART がサービス終了となり、楽天モバイルは代替として楽天リンクを推奨していますが、これは代替になりません(通話のことしか考えていない)。

 

Fusion IP Phone SMART には無料で使える留守番電話機能着信拒否機能があって、これらの機能が大変ありがたいものだったのです。

 

つまり携帯電話から Fusion IP Phone SMART に転送すればこれらの機能が無料で使えていたので、楽天リンクではこれらの代替にはならないのです。

 

 

 

次善の策はほかの 050 IP 電話サービスを使って、以下に紹介する方法で、一部ソフトフォンに備わっている留守番電話機能を利用するやり方でしょう。

 

月額利用料を考えると My050 が 92円/月額換算なので、安くて済みます。

 

G-Call050 は 308円/月額なので、留守電話サービス料 330円/月額との差額は 22円でメリットは薄い。

 

LaLa Call は7月1日から月額料金が大幅に値上げされますので選択肢から外れますし、SIP 情報非開示なので一般のソフトフォンアプリがそもそも利用できません。 

 

 

 

自己満 備忘録 に 050 IP 電話サービスを使った留守電方法が記載されています。

 

また、このサイトを参考にアレンジさせた方法が マイネ王 に記載されています。

 

 

 

これらはともに ブラステルの 050 IP 電話(My050) を使っています。

 

ともに IP 電話用ソフトフォンアプリが持つ留守番電話機能、前者は AGEphone、後者は LivyTalk、を活用しており、050 IP 電話の留守番電話サービスの有無を問わないやり方になっています。

 

実際、ブラステルには留守番電話サービスはありません。

 

 

 

AGEphoneLivyTalk の両方を試してみましたが、留守録はちゃんと機能します。 

 

 

 

【結  論】

Fusion IP Phone Smart がサービス廃止になった現在、無料で留守番電話を構成できる道はありません。 

 

ブラステルの My050 は初期チャージが 2,000円必要で、維持管理費をこれでまかなうことになりますが、1年6ヶ月分に相当し、その後また 2,000円チャージが必要です。

 

4,000円で 42ヶ月維持でき、月額換算 92円ほどですので、これが一番安くて済む方法でしょう。

 

 

次善策は楽天モバイルの留守番電話サービス・月額 330円をオプション契約することだと思います。

 

 

 

 

 

 

 

2025-05-07

楽天リンクで非通知拒否や迷惑電話拒否を Macrodroid でできるようにする

 

[楽天リンク]自体には非通知拒否や、迷惑電話拒否機能がありません。

 

 

[標準電話アプリ]に着信させて[標準電話アプリ]が持つ非通知拒否や迷惑電話拒否設定をするしかありません。

 

標準電話アプリに着信させるためには、次のいずれかの設定をします。

 

   1.楽天リンクをログアウトしておく


   2.楽天リンクのバックグラウンドをオフにする

         または強制終了状態にする、または無効設定する

 

 

しかしいろいろと不都合なことも生じます。

 

ログアウト状態だと、無料通話発信のためには都度ログインする手間が発生したり、うっかり折り返して有料発信になったりします。

 

2項の場合は、かけてくる相手側は約10秒間、無音が続くので、通話を許可する相手がしびれを切らして切断してしまうことがあったりします。

 

 

 

そこで Macrodroid を使って楽天リンクで非通知拒否や迷惑電話拒否ができるようにしてみました。

 

マクロは次に示すものです。

 

 

 

着信があると通知領域に楽天リンク呼び出しの通知があります。

 


 

 

上のマクロは「拒否リスト」に登録された番号からの着信の場合、【拒否】ボタンを自動クリックして着信拒否します。

 


「拒否リスト」はローカル変数に記述します。

 

複数の拒否番号(非通知を含む)を記述するには " | " で区切って登録しますが(正規表現で or を意味します)、「+44」などのような国番号を示す " + " 文字を記述するとマクロが if condition failed エラーになりますので、留意ください。

 

このような場合は「44-7873-062542」のように " + " を除いて登録します。

 

 

なお「条件分岐」の{lv=拒否リスト}は「正規表現を使用する」にチェックを入れます。

 

" lv " はローカル変数を意味し、このローカル変数に記述した番号リストを正規表現により、or 扱いで指定したことになります。

 




 

 

このマクロは Macrodroid のネイティブな機能だけで実現できていますので、さほど難しくはないと思います。

 

 

 

 

 

 

 

 

2025-04-30

[着信は標準電話アプリ/発信は楽天リンク]にできるように自動化【2025/05/01 変更】

 

【2025/05/01 変更】

「楽天Link 起動」マクロは不要で「楽天Link  無効化」マクロを修正したものだけでできるようにしました。

 

修正後のマクロは次のようになっています。

 



「Link アプリを無効」にする代わりに「Link アプリを強制停止」するアクションにしました。
 
 
[楽天リンク]を終了すると強制終了になり、以降の着信は[標準電話アプリ]になります。
 
発信時は[楽天リンク]が無効になっていませんので、そのまま[楽天リンク]で発信可能です。
 

 
[楽天リンク]のアプリ情報で確認すると「強制終了」という箇所がグレーアウトしていますので、強制終了状態であることを示しています。
 
 
 
こちらのやり方の方がより簡単です。
 
 
ただし強制終了の場合は、かけてきた相手側は約10秒間、無音になり、その後に呼出音が鳴ります
 
 
バックグラウンド・オフや、無効化などでも標準の電話アプリへの着信になりますが、このときも相手は約10秒間、無音になり、その後に呼出音が鳴ります。
 
 
[楽天リンク]をログオフの場合、かけてきた相手側は 3〜4秒ほどで呼出音が鳴ります。
 
 
なので、ウチでは私は普段は[楽天リンク]をログオフしていて、かけるときにログオンする運用にしています。
 
 
ここで紹介したやり方は連れ合い用のスマホに設定しています。
 
かけるときにログオンを忘れて電話できない、と泣きついてくるからです。
 
 
いずれにしても標準の電話アプリへの着信になりますから非通知や迷惑電話をブロックできます 
ーーーーーーーーーーーーーーーーーーーーーーーーーー

 

 

どのようにして実現するかといいますと「バックグラウンド:オフ」設定で着信[標準電話アプリ]になるようにします。

 

 

[標準電話アプリ]によって非通知拒否や迷惑電話ブロックなどが可能になります。

 

sms も同様に[標準メッセージアプリ]に着信します。

 

ここまではよくある方法です。

 

 

問題は[楽天リンク]がタスクリストに残っていると、次に着信があったときに[楽天リンク]に着信してしまうことです。

 

 

そこで[楽天リンク]終了時に[楽天リンク][無効化]します。

 

そうすると以降の着信も[標準電話アプリ]になります。

 

発信時は[楽天リンク][有効化]して起動するマクロを組み、このマクロをショートカット化します。

 

このときにアイコンも[楽天リンク]のものにします。

 

 

そうすることで[楽天リンク]で再び発信して無料通話が使えるようになります。

 

 

これを実現するため、MacrodroidShizuku を使って、非ルートのスマホで「特別なアクション」を使えるようにします。

 

 

 

まずは次に示す画面コピーをご覧ください。

 


 

赤く囲んだアイコンは楽天リンクを起動する Macrodroid ショートカットです。

 

中身は次のようになっています。

 


 

これらのアクションのうち、「アプリを有効(Link)」の部分は、ルートまたは Shizuku を使用して設定できるアクションです。

 

次の画面コピーで「ルート/Shizuku」とある「アプリを有効/無効」「アプリを強制停止」などのアクションがそれです。

 


 

 

もう一つのマクロは[楽天リンク]終了時に「アプリを無効」にしてタスクリストから削除します(無効化によって自動的に削除されます)。

 


 

Shizuku の起動方法は「Shizuku 使い方」で検索してください。

 

 

 

Shizuku を起動できるようにするには[設定]⇨[開発者オプション]で次の設定をします。

 



「USB デバッグ:オン」にし、「ワイヤレスデバッグ」(赤く囲んだ部分でスイッチ部分ではない)をタッチすると次の画面になります。

 


 

 「ペアコードによるデバイスのペア設定」をタップし6桁のコードを入力してスマホと Shizuku をデバイス内でペア設定します。

 

 

また、「デフォルトの USB 設定」「充電のみ」にします。

 

さらに「認可の監視を無効化:オン」にします。

 

 

「開発者オプション」の設定は以上です。

 

 

以上で Shizuku を起動できます。

 

 

起動すると「ルート/Shizuku」が付いた「アクション」が使えるようになります。

 

 

さて使い方ですが、最初の画面コピーで示した楽天リンクを起動する Macrodroid ショートカットをタップしてで無料発信します。

 

 

通話が終了したら[楽天リンク]を終了します。

 

すると[楽天リンク][無効化]されてタスクリストから自動削除されます。

 

以降は着信が[標準電話アプリ]の方になります。

 

 

したがっていつでも[着信は標準電話アプリ/発信は楽天リンク]にできます。

 

着信は[標準電話アプリ]なので非通知拒否や迷惑電話ブロックが有効になりますし、発信は[楽天リンク]によって無料通話ができます。

 

 

 


 

 

 

 

2025-04-25

moto edge40 neo を メインスマホ OPPO Reno11 A のサブ端末化

 

moto edge40 neo はメインスマホ・OPPO Reno11 A よりも一回り小さくて薄く、持ちやすいのでメインスマホのサブ端末にしてみました。

 

サブ端末化に際して、次のアプリもサブ端末化します。

 

サブ端末化はメインスマホで利用しているアプリを、サブ端末でも使えるようにすることです。

 

1.LINE

2.Whatsapp

3・Google Messages

4.楽天リンク

 

他にも モバイル Suica、JAF アプリなど機種変設定が必要なものもありますが、とりあえず上の4つがサブ端末化できれば OPPO Reno11 A の代わりに moto edge40 neo を普段の持ち歩き用に使うことができます。

 

LINEWhatsapp はサブ端末化機能がありますので、それを設定します。

 

Google Messageshttps://messages.google.com/web/ にアクセスしてウェブでアクセスできるようにし、そのページをホームに配置します。

 

やり方は割愛しますが検索して確認ください。

 

 

これによりサブ端末化ができ、moto edge40 neo で RCS / sms メッセージングができます。

 

 

楽天リンクですが、eSIM 化した際に無効になった SIM を SIM1 スロットに挿してログインします。

 

ログイン時の認証用 SMS はメインスマホに飛んできますので、サブ端末で手入力します。

 

 

サブ端末で楽天リンクにログインするとメインスマホの方は自動的にログオフされます。

 

つまりメインスマホとサブスマホの両方で楽天リンクは使えず、必ずどちらか一つになります。

 

楽天リンクのバージョンは本記事掲載時点の 2025/04/25 現在最新の 3.1.1 です。

 

注意いただきたいのは自分のメインスマホで使用していた SIM カードを、自分のサブ端末でのみ使う設定をすることです。

 

家族でもアカウントが異なる端末に使用する設定は規約違反になりますので厳に謹みましょう。

 

LINE、Whatsapp や、デスクトップ版の楽天リンクのように、メインスマホで使えている楽天リンクを、サブ端末でも同時に使える機能(サブ端末機能)を用意してくれるとありがたいのですが。。。 


メインスマホ側と連携して認証することで他人使用を防止できると思うのです。

 

 

 

SIM2 には 日本通信 の eSIM を設定しています。

 

右上のアンテナピクトの上が楽天モバイル、下が日本通信ですが、楽天モバイルは無効 SIM なのでアンテナピクトが立っていません。

 

楽天モバイルの無効 SIM は、通話もデータ通信にも使えないのですが、「楽天リンクへのログイン時に、楽天モバイル電番の SIM が必要」という条件を満たすことができます。

 


 

 

データ通信と SMS は日本通信 eSIM を設定し、通話は どちらを使うかを「確認」にします。

 

楽天モバイルを非通知にしないためには、通話設定を「確認」または「楽天モバイル」にする必要がありますが、後者だと日本通信 eSIM での通話がデフォルトではできなくなります。

 

「確認」にしておくと 日本通信 eSIM でも通話が可能になります。

 

なお 日本通信 eSIM は G-Call での第三者通話対象にしていて、8円/30秒(非課税)通話が可能です。

 

メインスマホの楽天モバイル電番もまた G-Call 第三者通話対象にしていますので、楽天リンクをログオフすれば G-Call 対象になります。

 

 

楽天リンクをサブ端末化していますので発信はこれを使います。

 

楽天電番への着信はこの楽天リンクに着信します。

 

 

 


 

 



2025-04-11

moto edge 40 neo と moto G64 5G を入手しました

 

 

moto G64 5G は連れ合いが使っていた OPPO Reno5 A の後継です。

 

mono edge 40 neo は予備機としていた OPPO Reno9 A の後継です。

 

これに伴い両 OPPO 機は売却しましたので、2台の実質購入価格は約 20,000円です。

 

どちらの機種もウチの使い方では、性能・機能は十分です。

 

 

 

 

 

 

 

 

 

2025-03-25

Blackview Tab60 タブレット(8.68 インチ)入手しました

 

出典:製品紹介サイトより
 

【仕様】

・Android14(DokeOS_P 4.0)

   GMS認証済み:Google Play Store からアプリ・インストールできる

・プロセッサ:Unisoc T606

・RAM:6GB + 12GB拡張

・ストレージ:128GB

・バッテリー:6050mAh

・画面サイズ:8.68インチ

・画面解像度:1340×800(WXGA)

・カメラ:8MP+5MP

・SIM:Dual SIM(4G LTE: FDD B1/B3/B7/B8/B20)

・WiFi:IEEE802.11 a/b/g/n/ac(2.4GHz/5GHz)

・デュアルスピーカー

・顔認証あり/指紋認証なし

・サイズ:211.7×124.4×8.4mm

・重量:338g

 

 

【モバイル通信】

APN を設定すればデータ通信は可能ですが、VoLTE が有効になっておらず、通話/SMS(+RCS)が機能しません。

 

VoLTE の有効化は Unisoc Engineer Mode で設定します。

 

通話アプリを開き、*#*#83781#*#* をダイヤルすると、

Unisoc Engineer Mode に入れます。


 

 

VoLTE/VoWIFI setting をタップすると次画面になります。

 


 

この画面の VoLte WhiteList Enable スイッチと VoWifi WhiteList Enable スイッチをオンにします。



Volte Enable がオフならばオンにすると自動再起動され、VoLTE が有効になって通知領域に VoLTE 表示が現れます。


Volte Enable がオンならば手動再起動すると VoLTE が有効になって通知領域に VoLTE 表示が現れます。

 

このとき、モバイル SIM の設定状態を見ると VoLTE スイッチが追加されてオンになっています。

 


 

VoLTE が有効になると通話や SMS が可能になります。

 

また Google Message で RCS を有効にできます。
 


 

このタブレットは通常使いには十分な性能で、4G LTE にも対応しています。

 

またバッテリーのもちは非常によく、画面ロック状態では2日程度は余裕です。

 

 

充電も 70 〜 90% で止める「充電保護機能」がついており、バッテリーに優しい充電が可能です。

 

急速充電には対応していませんので、充電に少し時間がかかります。

 

 

 

 

 

 


 

2025-02-19

脱獄なしに、Android や iPhone に ssh 接続できる

 

Android スマホや iPhone から ssh サーバーへ接続可能ですが、逆に他デバイスからこれらのスマホへも ssh 接続できます。

 

ともに脱獄は不要です。

 

Android スマホは Termux を使います。

Termux は ssh クライアントと ssh サーバーの両方を動作可能です。

 

openssh をインストールし sshd 設定します。



 

iPhone は iSH を使います。

こちらも ssh クライアントと ssh サーバーの両方を動作可能です。


Termux 同様、openssh をインストールし sshd 設定します。


a-Shell やほかの iPhone 用ターミナルアプリは openssh をインストールできず、sshd (サーバー機能) が使えません。

 

脱獄せずに使えるのは iSH のみです。

 

 

 

次の画面コピーは OPPO Reno11 の Termux 画面です。

 

Termux ssh クライアントから iPhone SE3 の ssh サーバー( iSH で動作)に接続検証していますが、OPPO Reno11 から自分自身の ssh サーバー(Termux で動作)への接続検証もしています。

 


 

 

$ ssh se3

   OPPO Reno11 から iPhone SE3 に接続しにいっています。

 

   se3 は ホームディレクトリ配下の .ssh ディレクトリ内の config ファイルで
   接続先情報を設定しており、接続名が se3 になっています。

 

   また iPhone SE3 は公開鍵認証方式にして、パスワードは不要にしています。

 

   接続中かどうかは env | grep SSH により、接続情報が返ってくるかどうかで
   確認できます。

 

   何も返ってこなければ接続中ではない、ということです。

 

 

$ ssh oppo 

   OPPO Reno11 自身に ssh 接続しにいっています。

 

   oppo は se3 同様に .ssh/config に接続情報を設定しており公開鍵認証方式で
   パスワード不要にしています。

 

 

ちなみに iSH の場合、システム設定でのバックグラウンド更新機能がないので、iSH を cat /dev/location > /dev/null & としてバックグラウンド動作させています。

 

 

 

Termux は設定でバックグラウンド設定ができますので、このような措置は不要です。

 

 

 

本事例では Android スマホから iPhone への ssh 接続と、自分自身への ssh 接続を示しましたが、PC や Mac 等との間でももちろん相互に ssh 接続可能です。 

 

 

このやり方はローカル空間のみで機能しており、グローバル空間には閉じていますので安全です。

 

グローバル空間からは VPN でローカル空間に入れば ssh 接続が機能します。

 

VPN は Tailscale が便利です。

 

 

 

 

 

 

 

 

2025-02-16

iPhone:iSH と Android:Termux の起動時の画面表示内容

 

まず、下図をご覧ください。

 


 

【解 説】

Termux 起動時のシェルスクリプト .bashrc を実行したもの

    1行目:自局ローカル IP(Android スマホの WLAN IP) を表示

    2行目:曜日 月日 時刻 JST 年 を表示

 

起動時に自動実行されるシェルスクリプト .bashrc の内容

    IP アドレスを termux-wifi-connectioninfo から得て整形し表示 

 

    termux-wifi-connectioninfo の実行結果は次で、 で囲んだ部分が自局 IP アドレス

    この中から grep で行を抽出し、余計な記号などを除いて表示している

 

    (ちなみに IP アドレスは ifconfig でも得られる

    date コマンドで 曜日 月日 時刻 JST 年 を得て表示

 

Termux から iPhone:iSH に ssh 接続

    iSH 起動時の画面が表示されるが、オリジナルのものとは異なる

    オリジナルの /etc/motd を変えている

    1〜4行目:変更後の /etc/motd の内容を表示 

    5行目:iPhone のローカル IP を表示 

    6行目:曜日 月日 時刻 JST 年 を表示

    (5〜 6行目は .profile のスクリプト実行結果を表示)

 

起動時に自動実行されるシェルスクリプト .profile の内容

    IP アドレスは python3 プログラム実行で得ている

    (iSH は ifconfig や ip コマンドが使えないため)

       ※ get-my-ip.py は Abo5 氏 作成の、

              https://github.com/ish-app/ish/issues/145 

           からコピペし、一部修正している

    date コマンドで 曜日 月日 時刻 JST 年 を得て表示

 

 

get-my-ip.py のソース内容

    import 行から s.close() 行までが python のソース

 

    最終行の localhost:~# は iPhone:iSH のプロンプト

 

 

 

以上、ターミナルエミュレーターの起動時に表示されるメッセージを編集してみました。

 

 

 

 

 

 

 

 

2025-02-10

ssh 接続先サーバーでコマンドを実行させるクライアント側の ssh 接続の仕方と、ファイル転送

 

【ssh サーバー/クライアント間ファイル転送】記事後半に記載

 

 

ssh クライアントが接続時に「おまじない」をして接続すると接続した ssh サーバーのコマンドを実行できます。

 

 

次に示すのは OPPO Reno11 A の画面コピーです。

 




 

 

【解説】

 

1.Termux 開始後に、最初に "env|grep SSH" としていますが、まだ SSH 接続していないので結果は何も表示されません

 

2.$cmd 変数には " ps;" を設定しています

      これは ssh 接続したときに ssh サーバーで実行するコマンドです

 

3.ssh 接続します

      ssh -t se3 "cmd=$cmd ash" で ssh 接続します

 

      接続先の se3 は iPhone SE3 の iSH に設定の ssh サーバーです

      .ssh/config に次のような設定をすると HOST 名でアクセスできます

         HOST se3 # ホスト名
            HostName 192.168.xxx.yyy # ssh サーバーアドレス
            User root
            Port nnnn


      -t オプションで仮想端末を強制的に割り当てます

 

      "cmd=$cmd ash" はサーバーで実行するコマンドです

      ash はサーバーを close させないためです

      ” ps; ash" と記述しても同じ結果になります

 

4.サーバーでは ls コマンドが自動的に実行されてプロセス状態表示されます

 

5."env|grep SSH" を実行し、結果が返ってきていますので、サーバー側にいることがわかります

 

6.サーバー上で /usr ディレクトリに移動します

 

7.サーバー上で ls コマンドを実行します

      /usr ディレクトリ内のファイル一覧が表示されています

 

 

 

以上のように、サーバーに接続して実行するコマンド(群)やシェルを指定して ssh 接続時に自動実行させることができます。

 

本事例では " ps;" でしたが、" ps; cd /usr; ls;" として一連のコマンド群を順に実行させることができます。

 

 

参考にしたのは下記サイトです。

 

https://qiita.com/ktooi/items/d93778fbc0a60910fbb7

 

 

 

 

 

【ssh サーバー/クライアント間ファイル転送】

サーバーとクライアント間でファイルやフォルダを転送するには次のようにします。

 
■ クライアント側(ローカル側)からリモート側(ssh サーバー側)へ転送

ssh -p [nnnn] [<user][address] 'cat > /[dir]/[file1]' < [file2]

 

   [nnnn]         :ポート番号

   [user]          :ユーザー名

   [address]     :IP アドレス

   [dir]             :リモート側ディレクトリ

   [file1]           :リモート側に保存するファイル名

   [file2]           :ローカル側の現ディレクトリのファイル名

 

例:ssh se3 'cat > /usr/test-file' < test.txt

 

 

■ リモート側からローカル側へ転送の場合

ssh -p [nnnn] [user][address] cat /[dir]/[file3] > [file4]

 

   [file3]           :リモート側から転送するファイル名

   [file4]           :ローカル側の現ディレクトリに保存するファイル名

 

例:ssh se3 cat /usr/test.txt > test.tmp

 

ーーーーーーーーーーーーーーーーーーーー

 

 

 

下図は OPPO Reno11 A の Termux 画面です。

 



 

次図は sshd サーバーである iPhone SE3 の iSH 画面です。

 


 

 

① はローカル(OPPO 側)からサーバー(iPhone)に送る test.txt の中身です

    最終行の日時を確認ください

 

② これをサーバーに送る ssh コマンドですが、受け取ったサーバーでは
    test-file というファイル名で /usr 配下に書き込みます

    ⑤ が受け取ったファイル test-file の中身です

    転送したファイルと同じ日時になっているのが確認できます

 

③ サーバー側の test.txt は ⑥ のよう中身で、これをローカル側に転送し、
    ローカル側では test.tmp として保存します

 

④ ローカル側に保存した test.tmp の中身を表示したもので、⑥ の内容と同じ
    であることを確認できます

 

 

 

 

ssh コマンドのオペランドの内容はサーバー側で接続後に実行するコマンドです。

 

「<」や「>」を含む場合は「”」か「’」で囲みます。

    

 

ssh コマンドは実行後サーバーからは exit します。 

 

サーバーから抜けることで、結果をローカルのファイルとして保存できます。

 

 

以下のようにしても同じ結果が得られます。

 

■ クライアント側(ローカル側)からリモート側(ssh サーバー側)へ転送 

 

下記の ① と ② は同じことです。

 

① ssh se3 'cat > /usr/test-file' < test.txt 

② ssh se3 dd of=/usr/test-file < test.txt 

 

 

リモート側(ssh サーバー側)からクライアント側(ローカル側)へ転送 

 

下記の ③ と ④ は同じことです。

 

ssh se3 cat /usr/test.txt > test.tmp

④ ssh se3 dd if=/usr/test.txt > test.tmp 

 

 

 

 

 

 

 


2025-02-05

iOS の iSH -Alpine Linux- で sshd を自動起動化する【2025-02-08 追記】

【2025-02-08 追記】 iOS の sshd への接続エラー対策

 

iOSiSH 強制終了後の最初の起動を「初期起動」とします。


iSHexit 後は「再起動」され「初期起動」とは異なります。


なにが異なるかといいますと「初期起動」時の自動実行と「再起動」時の自動実行が違うのです。


「初期起動」時に自動実行されたプロセスは「再起動」後も有効です。

 

一方「再起動」時の自動実行は「再起動」のたびに実行されますが、すでに起動されているプロセスがある場合、2重・3重にプロセスが立ち上がります。


 

このような動作になるのは iOS のヘンなポリシー(制限といってもいいでしょう)のせいです。

 

Android の場合、アプリの終了は iOS の強制終了と同等なのでこのような違いは生じません。

 

iOS ってややこしいと思いませんか???

 

 

本記事ではこの違いを踏まえた自動実行化について記載します。

 


januszoles/ish: iPad iSH Alpine Linux Notes

 

の中ほどあたりに、

   Welcome to Alpine on iPhone 6! (2023-04-12)

という箇所に sshd に関する記述があります。

 

この中の、Install and config ssh という項目の記述に従い ssh(sshd) の自動起動化のための処理を行います。

 

openssh のインストールと sshd の設定は済んでいるものとします。

 

$ apk update # リポジトリのアップデート
$
apk upgrade #インストール済みパッケージの最新化
$
apk add openrc # systemctl 相当のパッケージインストール


openrc インストールにより、systemctl 相当のことが可能になります。

 

sshd の起動は次のようにします。


$ rc-service sshd start
grep: /proc/filesystems: No such file or directory
 

 

エラーが出ますが sshd は起動されます。

 

エラーメッセージが出るのはバグっぽいのですが、出ないようにする方法は不明です。

 

* You are attempting to run an openrc service on a
*  * another initialization system to boot this system.
* If you really want to do this, issue the following command:
* ERROR: sshd failed to start
 

要約:このシステムを起動するために、別の初期化システムで openrc サービスを実行しようとしています。

本当にこれを行う場合は、次のコマンドを発行してください:

 エラー: sshd の起動に失敗しました

 

「次のコマンドを発行してください」は次のコマンドです

 

$ /usr/sbin/sshd 

 

こちらはエラーがでません。

 

 

sshdiSH 起動時に自動起動するための登録を、次のようにします。 


$ rc-update add sshd # iSH 起動時に自動起動する登録

 

 

次に iSH をバックグラウンド化する処理を自動化します。

 

バックグラウンド化とは、常に動作状態にして sshd などが終わってしまうのを防ぐことです。

 

Google 検索によると、デーモンには次のような種類があります。


・システム管理系

・タスクスケジューリング系

・ネットワーク系

・周辺機器系

・通信プロトコルサーバ

・電子メール関連

・Samba 関連

・分散メモリキャッシュ関連

・データベースサーバ関連

 

systemd / syslogd / sshd / ftpd / smbd / crond / httpd などなど。

 

これらが勝手に終了状態にならないように、大もとの iSH を常駐化するのです。

 

「初期起動」時にバックグラウンド化するには local デーモンを使います。


 

$ apk add local # local デーモンをインストール

 

このインストールにより /etc/local.d ディレクトリができます。

 

ここに、起動時に読み込むファイルを alpine.start とでもして作成します。

 

ファイル名は任意ですが、拡張子は .start の必要があります。

 

中身は

 

cat /dev/location > /dev/null & # バックグラウンド化
[EOF]

 

です。

 

alpine.start には実行権を与え、local デーモンの自動起動登録をします。

 

$ chmod 700 /etc/local.d/alpine.start
$ rc-update add local

 

いったん iSH を強制終了させ、iSH を「初期起動」します。 


プロセス状態を確認します。

 



画面では PID 84iSH のバックグラウンド化ができていて、236sshd が自動起動されているのが確認できます。

 

 

 

rc-status で自動起動登録したデーモンの状態を確認します。

 


 

Runlevel: defaultsshdlocal が登録されていて、ともに起動済みとなっているのが確認できます。

 

local が起動されると alpine.start が読み込まれ、cat /dev/location > /dev/null & が実行され、iSH のバックグラウンド化がされます。

 

 

 


.profile に記述のスクリプトは iSH「初期起動」時のみならず、exit による「再起動」時も実行されます。



ここに /usr/sbin/sshdcat /dev/location > /dev/null & を記述してもいいのですが、exit による iSH 「再起動」でこれらが実行されると 2重起動状態になってしまいます。


 

なので .profile には exit「再起動」されても 2重起動にならないフォアグラウンドコマンドのみにした方がよいでしょう。



デーモンパッケージは rc-update「初期起動」時の自動起動対象として登録するように使い分けします。



コマンド系(例えば cat /dev/location > /dev/null &)は /etc/local.d に実行ファイル(本事例では alpine.start)を用意するといいでしょう。



現在、ホームディレクトリの .profile には何も設定していませんが、例えば date コマンドを記述すると、exit で再起動されて次のように時刻表示がされます。

 


 

date コマンドは実行されるとプロセスが終了しますので2重起動にはなりません。

 

 

 

 

【2025-02-08 追記】 iOS の sshd への接続エラー対策

 

自動化したものの、ssh で接続できたものが突然に ssh connection refused となったり、no route to host という接続不可事象が発生します。

 

どちらも ping は通りますので、sshd サーバーである iPhone の IP アドレスを誤っているわけではありません。

 

とするとポートが listen されていない、という事象と考えられます。

 

ポートが何らかの原因で閉じられた、と考えるのが普通ですよね。

 

なのでなぜ閉塞されるか、いろいろ調べてもわかりません。

 

本事象は不定期に発生し、一旦発生すると sshd の再起動が必要になり、面倒ですが、原因がわからなくてお手上げ状態でした。

 

 

随分と悩まされましたが、iPhone を WiFi アクセスポイント接続時の dns に IPv6 アドレスを登録していると発生することがわかりました。

 

ポート閉塞ではなかったのです。

 

 

接続してくるクライアントのアドレスが IPv4 で OK だったのを、sshd サーバーが何らかのタイミングで IPv6 での接続とみなし、IPv6 アドレスではないのでこのようなエラーになるようなのです。

 

いったんこの事象に見舞われると sshd の再起動しか回復しませんが、しばらくすると(1時間程度から 12時間程度)また接続エラーになります。

 

 

 

そこで、次の対策を講じました。

 

1.sshd_config の設定変更

      「# AddressFamily any」行を「AddressFamily inet」に変更   

      初期設定はコメントアウトされているのでデフォルトの any になっている

      any は IPv4 と IPv6 のどちらも接続許可する設定

      ⇨ コメントを外し inet(IPv4 のみ接続許可)にする

 

 

2.iPhone の Wi-Fi 設定で「IP を構成」は「手動」

      アドレスを固定するためでもともと「手動」設定している

 

 

3.「DNSを構成」を「手動」にし DNS サーバから IPv6 アドレスを削除する

       念のため DNS を IPv6 で引かないようにする  

 

 

 

以上の対策によって、ssh connection refused や、no route to host で接続不可となっていた問題がなくなり、安定して接続できるようになりました。

 

 

IPv6 が悪さをしていたなんて、誰が気づくというの?

 

 

 

 

 

ちょいと便利な設定

 

iPhone / iSH の sshd サーバのポートは Standard port ではなく Alternative port にします。

 

例えば 22 ではなく 2222 などに変更しますが、これは sshd_config 中の Port 行のコメントアウトを外し、2222 などを設定します。

 

 

クライアント側の ssh_config の Port 行も同じ設定をすると接続時に -p 2222 としないで済みます。

 

Android Termux の場合、/data/data/com.termux/files/usr/etc/ssd/ssd_config を編集します。

 


 

 

iPhone の場合、/etc/ssd/ssd_config を編集します。