0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Androidスマホでbashスクリプトを実行しよう!curlでWi-Fiルータを再起動

0
Last updated at Posted at 2025-12-12

1. はじめに

以前の記事で、PythonスクリプトでのWi-Fiルータ再起動について紹介しましたが、bashスクリプトだけでも行けそうな気がしたので試してみました。案の定、curlでWi-Fiルータの再起動をトリガできたので、新たに記事を書くことにします。今回は、スマホでbashスクリプトを実行することに焦点を当てています。

本記事の対象ルータは「BUFFALO WSR-1166DHPL2」です。

以前の記事はこちらです。

2. Termuxのインストール

まずはこれが必要です。AndroidでLinuxターミナルが動いて、サーバ構築すらできてしまう強力なツール。Google Play版はなぜかバージョンが古いので、F-Droid経由でインストールします。以下のサイトをスクロールしていくと「F-DROIDをダウンロード」と書かれたボタンがあるので、ここから .apk ファイルをダウンロードしてインストールします。

F-Droidがインストールできたらアプリを起動してください。アプリ内で「Termux」を検索すると、Termuxの最新版をインストールできます。

3. SSH接続の準備

スマホ画面からポチポチではなかなか話も進まないので、PCからSSHで接続できるようにしてしまいます。まずはTermuxを起動して、以下のコマンドを実行してください。何か入力を求められたら、とりあえずEnterキーを押しておけばOK。

pkg update
pkg upgrade
pkg install openssh

続いて、接続用のパスワードを設定します。

passwd

接続に必要なユーザ名とIPアドレスを確認します。

whoami
ifconfig

最後に、SSHデーモンを起動します。

sshd

4. bashスクリプトの作成

確認しておいたユーザIDとIPアドレスでPCからスマホに接続します。Windowsの場合はPowerShellを使用して以下のコマンドを実行してください。初回接続時は警告が出ますので、yes と入力してください。

ssh u0_axxx@192.168.x.x -p 8022

それでは、ざくざくと進めていきます。まずはスクリプト用のフォルダを作成します。

mkdir ~/reboot_router

次のコマンドで、テキストエディタを開きます。以下のコードをコピペして「Ctrl + O」からのEnterで保存、「Ctrl + X」で終了です。

nano ~/reboot_router/reboot_wsr-1166dhpl2.sh
~/reboot_router/reboot_wsr-1166dhpl2.sh
#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail

# .envファイルを読み込む
set -a
source "$(dirname "$0")/.env"
set +a

ROUTER_URL="http://${ROUTER_IP}"
LOGIN_URL="${ROUTER_URL}/login.html"
INIT_URL="${ROUTER_URL}/init.html"

COOKIE_JAR="$(mktemp)"
trap 'rm -f "$COOKIE_JAR"' EXIT

# 1. ログイン
login_status=$(curl -sS \
    -c "$COOKIE_JAR" \
    -o /dev/null \
    -w "%{http_code}" \
    -X POST \
    --data "nosave_Username=${ROUTER_USER}" \
    --data "nosave_Password=${ROUTER_PASS}" \
    --data "MobileDevice=0" \
    --data "nosave_session_num=" \
    "$LOGIN_URL")
echo "Login status: ${login_status}"

# 2. init.htmlを取得してセッション番号を探す
init_html="$(curl -sS -b "$COOKIE_JAR" "$INIT_URL")"
session_num="$(grep -Po \
    'name="nosave_session_num" value="\K\d+' \
    <<<"$init_html" | head -n1)"
if [[ -z "${session_num:-}" ]]; then
    echo "セッション番号が見つかりません" >&2
    exit
fi
echo "取得したセッション番号: ${session_num}"

# 3. 再起動
set +e
reboot_output=$(curl -sS \
    -b "$COOKIE_JAR" \
    -o /dev/null \
    -w "%{http_code}" \
    -X POST \
    --max-time 5 \
    --data "nosave_reboot=1" \
    --data "nosave_session_num=${session_num}" \
    "$INIT_URL")
curl_exit=$?
set -e

if [[ $curl_exit -ne 28 ]]; then
    echo "再起動リクエスト: ${reboot_output}"
else
    echo "ルータ再起動中。タイムアウトしましたが正常です。"
fi

保存してエディタを終了したら、スクリプトに実行権限を付与します。

chmod +x ~/reboot_router/reboot_wsr-1166dhpl2.sh

.env ファイルも必要になるので作成します。お使いの環境に合わせて入力してください。

nano ~/reboot_router/.env
~/reboot_router/.env
ROUTER_IP=192.168.x.x
ROUTER_USER=xxxxx
ROUTER_PASS=xxxxxxxx

5. エイリアスの作成

スマホ画面からポチポチのレベルでスクリプトを実行したいので、エイリアスを作成します。Termux起動時に有効になるように、.bashrc に追加します。

nano ~/.bashrc
~/.bashrc
alias wifi='~/reboot_router/reboot_wsr-1166dhpl2.sh'

保存してエディタを終了したら、Termuxを一旦終了して立ち上げ直してください。スマホ画面から wifi と打ってEnterすると…どうでしょうか。Wi-Fiルータを再起動できたでしょうか。私の環境では動きますw

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?