Edited at

Debian noroot 環境において dropbear に基づく SSH サーバを導入する


はじめに

Debian noroot とは、 Android OS 上において root 権限を取ることなく Debian 環境を構築するためのアプリケーションです。

CPU の性能とメモリ容量が潤沢にある Android 端末であれば、 Debian noroot の導入によって Android 端末上で非常に軽快な Debian 環境を実現することができます。

Debian noroot 環境上において SSH サーバを起動すると、 SSH クライアントをインストールした遠隔の PC 端末から Debian noroot 環境を容易に操作することが可能となるので、非常に有用です。

しかし、 Debian noroot 環境に、各種 Linux ディストリビューションで多く用いられている OpenSSH を導入して sshd デーモンを起動しようとすると、以下のようなエラーメッセージを出力して sshd が正常に起動しません。

 $ sudo bash

# apt-get install openssh-server

... # (ここで sshd を起動する為の適切な各種設定)

# /etc/init.d/ssh start
Starting OpenBSD Secure Shell server: sshd/var/run/sshd must be owned by root and not group or world-writable.
failed!
#

この問題は、ディレクトリ /var/run/sshd の所有者が root では無く、グループ及び全てのユーザに対して書き込み可能な状態であり、ディレクトリ /var/run/sshd の所有者および権限をユーザ権限からでは変更出来ないのが原因であると考えられます。

そこで、 Debian noroot 環境上における SSH サーバとして OpenSSH に代えて軽量な SSH サーバである dropbear の導入を行いました。

次に、 Debian noroot 環境上におけるユーザのパスワードを変更する設定を行った後、 Debian noroot 環境dropbear デーモンを一時的に起動して、 SSH クライアントをインストールした遠隔の PC 端末よりパスワード認証を用いた SSH による接続確認を行いました。

そして、 SSH クライアントをインストールした遠隔の PC 端末から、 SSH クライアントにおいて使用する公開鍵と秘密鍵を生成し、公開鍵を Debian noroot 環境に転送して、遠隔の PC 端末より公開鍵認証を用いた SSH による接続確認を行いました。

最後に、 Debian noroot 環境の起動時に dropbear デーモンを自動的に起動させる為の設定を行いました。

以上の設定により、 Debian noroot 環境の起動後は Android OS 端末に触れること無く、 SSH クライアントをインストールした遠隔の PC 端末から Debian noroot 環境を操作することが出来るようになりました。

本稿では、 Debian noroot 環境dropbear を導入して、 SSH クライアントを導入した各種端末から Debian noroot 環境にリモートログインを行うことが出来る環境を構築する一連の過程について述べます。

まず最初に、 "接続先への dropbear の導入" の章において、 Debian noroot 環境dropbear 及び dropbear に関連するパッケージをインストールする手法について述べます。

次に、 "パスワード認証に基づく SSH による接続の設定" の章において、前章Debian noroot 環境に導入した dropbear に向けて、パスワード認証に基づいた SSH のリモートログインを行うための設定の手法について述べます。

そして、 "公開鍵認証に基づく SSH による接続の設定" の章において、接続元となる PC 端末において生成した公開鍵を、接続先となる Debian noroot 環境に転送し、接続先の Debian noroot 環境に導入した dropbear に向けて、公開鍵認証に基づいた SSH のリモートログインを行うための設定の手法について述べます。

続いて、 "接続先の dropbear デーモンの起動の自動化" の章において、前々章及び前章にて設定及び動作確認を行った dropbearDebian noroot 環境の起動時に自動的に起動させる為の設定の手法について述べます。

最後に、 "結論" の章において、本稿の結論について述べます。

なお本稿においては、特段の断りのない限り、 SSH によるリモートログインの接続先となる Debian noroot 環境及び接続元となる SSH クライアントに関する各種環境設定等に関しては、下記の通りであるとします。



  • Debian noroot 環境が動作している端末の IP アドレス: 192.168.0.1


  • Debian noroot 環境上で動作する dropbear デーモンが待ち受ける SSH のポート番号: 12022


  • Debian noroot 環境におけるユーザ名 (環境変数 USER の値): u0_a200

  • 接続元にインストールされた SSH クライアント: 各種 Linux ディストリビューションにインストールされた OpenSSH_6.7p1

  • 接続元にインストールされた SSH クライアントにおけるユーザ名 (環境変数 USER の値): z80oolong


接続先への dropbear の導入

本章では、 SSH によるリモートログインの接続先となる Debian noroot 環境dropbear を導入する手法について述べます。

本稿において前述したように、 Debian noroot 環境上において起動する SSH サーバとして dropbear を使用します。本稿では、 Linux の各ディストリビューション上におけるソースコードの取得及びビルドに基づいたパッケージ管理システムである Linuxbrew を用いて Debian noroot 環境に対応した dropbear を導入します。

まずは、 "Debian noroot 環境に Linuxbrew を導入する" の投稿及び Linuxbrew の公式ページに基づいて Linuxbrew に依存するパッケージと Linuxbrew 本体のリポジトリを導入します。

 $ sudo apt-get install build-essential curl file git python-setuptools ruby

$ sudo apt-get install m4 texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev gettext # 必要に応じて任意に導入する。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install)"

なお、 32 bit ARM アーキテクチャ及び 64 bit x86 アーキテクチャ以外を搭載した携帯端末にインストールされた Debian noroot 環境Linuxbrew を導入する場合、前述の Linuxbrew の本体のリポジトリを導入するコマンドを実行すると、途中で Linuxbrew が使用する ruby 処理系の bottle ファイルの取得に失敗して、導入作業が正常に行われません。

従って、これらの携帯端末における環境の場合は、 "Linuxbrew の自動的なインストールスクリプトが異常終了する場合における代替の導入手法" の投稿に基づき、 Linuxbrew の開発コミュニティによる Linuxbrew のインストールスクリプトに代えて、下記のようにして Linuxbrew を導入する必要が有ります。

 $ sudo apt-get install build-essential curl file git python-setuptools ruby

$ sudo apt-get install m4 texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev gettext # 必要に応じて任意に導入する。
$ sudo apt-get install libssl-dev libreadline6-dev libyaml-dev libgdbm-dev libdb-dev
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/z80oolong/linuxbrew-altinstall/master/install.sh)"

そして、 bash の初期化ファイルである ${HOME}/.bashrc について、以下の通りに環境変数の設定を行い、 bashrc を再起動します。


${HOME}/.bashrc

...

# for Linuxbrew

export HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew"
export PATH="${HOMEBREW_PREFIX}/sbin:${HOMEBREW_PREFIX}/bin:$PATH"
export MANPATH="${HOMEBREW_PREFIX}/share/man:${MANPATH}"
export INFOPATH="${HOMEBREW_PREFIX}/share/info:${INFOPATH}"
export HOMEBREW_NO_AUTO_UPDATE=1
...


次に、以下の通りに brew tap コマンド及び brew install コマンドを実行して、 Debian noroot 環境に対応した dropbear を導入します。

 $ brew tap z80oolong/debian-noroot

$ brew install -dv z80oolong/debian-noroot/dropbear

この時、ソースコードのコンパイルに時間が掛かると思われますが、我慢強くインストールの完了を待つ必要が有ります。この場合、 Android 端末に CPU の性能とメモリ容量が潤沢にあれば、別に他の必要な Android OS アプリを起動して Linuxbrew でのインストールの完了を待っても構いません。

なお、 dropbear において SFTP に基づくファイル転送を行う場合は、 OpenSSH サーバに同梱された SFTP サーバである openssh-sftp-server パッケージを apt-get コマンドを用いて導入する必要があります。

 $ sudo apt-get install openssh-sftp-server


パスワード認証に基づく SSH による接続の設定

本章では、接続先となる Debian noroot 環境 に導入した dropbear について、パスワード認証に基づいた SSH のリモートログインを行うための設定について述べます。

まず最初に、 "Debian noroot 環境のユーザのパスワードを変更する" の節において、 Debian noroot 環境に導入した dropbear へのリモートログインの設定に先立って、 Debian noroot 環境のユーザのパスワードを変更する設定について述べます。

次に、 "接続先の $HOME/.bashrc を設定する" の節において、接続先となる Debian noroot 環境上の dropbear への SSH のリモートログインの接続において、日本語環境等の主要な環境変数を反映させるための、接続先の $HOME/.bashrc の設定について述べます。

そして、 "接続先の $HOMEBREW_PREFIX/etc/dropbear/dropbear.d を設定する" の節において、接続先となる Debian noroot 環境上の dropbear デーモンが待ち受けるポート番号等を指定するための、 dropbear デーモンの起動スクリプトである $HOMEBREW_PREFIX/etc/dropbear/dropbear.d の設定について述べます。

最後に、 "パスワード認証に基づく SSH による接続の確認" の節において、接続先となる Debian noroot 環境において、パスワード認証に基づく SSH を用いたリモートログインによる接続を確認する手法について述べます。


Debian noroot 環境のユーザのパスワードを変更する

本節では、 SSH クライアントをインストールした遠隔の PC 端末から Debian noroot 環境dropbear へパスワード認証に基づいた SSH のリモートログインを行うために、 Debian noroot 環境 のユーザのパスワードをユーザ自身以外に知り得ないものに変更する設定について述べます。

Debian noroot 環境 においては、通常の Debian 環境と同様に sudo 経由で passwd コマンドを用いて任意のユーザのパスワードを変更することが出来ます。

即ち、以下のように passwd コマンドを実行して、ユーザ u0_a200 のパスワードをユーザ自身以外に知り得ないものに変更します。

  $ env LANG=C LC_ALL=C sudo passwd u0_a200

Changing password for u0_a200
New UNIX password: # (ユーザ自身以外に知り得ないパスワードを入力)
Retype new UNIX password: # (前に入力したパスワードを再入力)
passwd: all authentication tokens updated successfully
$

上記のコマンド passwd の実行により、Debian noroot 環境 のユーザのパスワードを変更することが出来ます。


接続先の $HOME/.bashrc を設定する

本節では、 Debian noroot 環境上の dropbear への SSH のリモートログインにおいて、日本語環境及び Debian noroot 環境の動作の上で必要となる主要な環境変数を反映させるために、接続先の $HOME/.bashrc を設定する手法について述べます。

後述で行う、接続先となる Debian noroot 環境上の dropbear へのパスワード認証に基づいた SSH のリモートログインによる接続確認において判る通り、 dropbear を用いた SSH によるリモートログインの環境においては、日本語 locale 及び日本語入力メソッド関連等の環境変数が反映されません。

ここで、接続先の SSH によるリモートログイン環境においては、接続先および接続元の IP アドレス及びポート番号に関する情報は、環境変数 SSH_CONNECTION に保持されています。

即ち、接続先の SSH によるリモートログインシェルの初期化ファイルである ${HOME}/.bashrc に下記の記述を追記します。


${HOME}/.bashrc

...

# SSH によるリモートログイン環境の場合は、主要な環境変数を $HOME/.bashrc で再定義する。

case `echo ${SSH_CONNECTION} | cut -d ' ' -f 1` in
192.168.0.*)
export TZ="Asia/Tokyo"
export LANG="ja_JP.UTF-8"
export LC_ALL="ja_JP.UTF-8"
export LANGUAGE="ja"
export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export QT4_IM_MODULE=fcitx
export CLUTTER_IM_MODULE=fcitx
export VTE_CJK_WIDTH=1
;;
...

esac
...


上記の記述により、接続先の SSH によるリモートログイン環境において、日本語環境関連の設定に関する重要な環境変数が反映されます。


接続先の $HOMEBREW_PREFIX/etc/dropbear/dropbear.d を設定する

本節では、接続先となる Debian noroot 環境上の dropbear において、 dropbear デーモンが待ち受けるポート番号及び root によるログイン等の抑止を行うために、 dropbear デーモンの起動スクリプトである ${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d を設定する手法について述べます。

最初に、 dropbear デーモンの起動スクリプトである ${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d を必要に応じて下記のように編集します。編集する箇所は下記の2箇所です。


${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d

...

PORT=12022
#SERVER_OPTION="-W 65536 -s -w -g"
SERVER_OPTION="-W 65536 -w -g"
...

まず、環境変数 PORT において、 dropbear デーモンが待ち受けるポート番号を指定します。このポート番号は必ず 1024 番以上を指定する必要があります。

そして、環境変数 SERVER_OPTION において、 dropbear デーモンに追加する引数を指定します。本稿においては、下記のように引数を追加します。



  • -W <receive_window_buffer> … receive_window_buffer のサイズを指定する。この数値が大きいほど接続速度が若干早くなる。


  • -w … root によるログインを抑止する。


  • -g … root によるパスワードを用いたログインを抑止する。

また、以下の引数を一旦無効にします。



  • -s … パスワードを用いたログインを抑止する。

上記の記述により、 Debian noroot 環境への SSH によるリモートログインをポート番号 12022 で待ち受け、ユーザによるパスワードを用いた認証を有効にし、 root によるログインを完全に抑止します。


パスワード認証に基づく SSH による接続の確認

本節では、接続先となる Debian noroot 環境において dropbear デーモンを一時的に起動し、パスワード認証に基づく SSH を用いたリモートログインによる接続を確認する手法について述べます。

まず最初に、 dropbear の起動スクリプトである ${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d を下記のように実行して、接続先となる Debian noroot 環境dropbear デーモンを起動します。

  $ $HOMEBREW_PREFIX/etc/dropbear/dropbear.d start

Start Dropbear Daemon...
Creating PID file "/var/run/dropbear.pid".
Appending to /var/log/dropbear.log
$

そして、接続元となる遠隔の PC 端末上にインストールされた SSH クライアントである ssh コマンドを下記のように起動します。

  $ ssh -l u0_a200 -p 12022 192.168.0.1

The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established.
RSA key fingerprint is 11:22:33:44:55:66:77:88:99:aa:bb:cc:de:ad:be:ef.
Are you sure you want to continue connecting (yes/no)? # (ここでは、そのままリターンキーを入力)
...
u0_a200@192.168.0.1's password: # (ここで、 Debian noroot のユーザのパスワードを入力)

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
$

上記のように dropbear の banner が表示され、リモートログインシェルが起動すれば、設定が正常に行われていることが判ります。


公開鍵認証に基づく SSH による接続の設定

本章では、接続先となる Debian noroot 環境 に導入した dropbear について、公開鍵認証に基づいた SSH のリモートログインを行うための設定について述べます。

最初に、 "接続元における公開鍵及び秘密鍵を生成する" の節において、公開鍵認証に基づいた SSH のリモートログインを行うために必要となる公開鍵方式における秘密鍵と公開鍵の対を生成する手法について述べます。

次に、 "接続元から接続先へ公開鍵を転送する" の節において、前節において生成した公開鍵を、 SSH によるリモートログインの接続先となる Debian noroot 環境に転送する手法について述べます。

そして、 "接続元の $HOME/.ssh/config を設定する" の節において、 SSH によるリモートログインの接続元となる SSH クライアントの設定ファイルである ${HOME}/.ssh/config において必要となる設定について述べます。

最後に、 "公開鍵認証に基づく SSH による接続の確認" の節において、接続先となる Debian noroot 環境において、認証に基づく SSH を用いたリモートログインによる接続を確認する手法について述べます。


接続元における公開鍵及び秘密鍵を生成する

本節では、 SSH によるリモートログインの接続元の遠隔の PC 端末において、 SSH クライアントで使用するために必要となる秘密鍵と公開鍵の対を ssh-keygen コマンドを用いて生成する手法について述べます。

まず、 ssh-keygen コマンドを起動して、公開鍵暗号方式における公開鍵と秘密鍵の対を生成します。本稿では、 RSA に基づいた鍵の対を生成するものとします。

 $ ssh-keygen -t rsa -f /home/z80oolong/.ssh/id_rsa.foo                                                                                             

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): # ここで、パスワードの入力は空文字列を含め任意 (空文字列とすることを勧めます)
Enter same passphrase again: # 再度、空文字列を含め同一のパスワードを入力
Your identification has been saved in /home/z80oolong/.ssh/id_rsa.foo.
Your public key has been saved in /home/z80oolong/.ssh/id_rsa.foo.pub.
...
$

上記の ssh-keygen コマンドの実行により、接続元の PC 端末のディレクトリ /home/z80oolong/.ssh 以下に秘密鍵ファイル id_rsa.foo と公開鍵ファイル id_rsa.foo.pub が生成されているのが判ります。


接続元から接続先へ公開鍵を転送する

本節では、前節において ssh-keygen コマンドによって生成した公開鍵ファイル /home/z80oolong/.ssh/id_rsa.foo.pub を接続先となる Debian noroot 環境に転送する手法について述べます。

本稿では、接続元から接続先に公開鍵ファイルを転送し、接続元の環境に適切な設定を行う為の簡便なコマンドである ssh-copy-id コマンドを用います。

まず、以下のようにして ssh-copy-id コマンドを実行し、公開鍵ファイル /home/z80oolong/.ssh/id_rsa.foo.pub を転送します。

  $ ssh-copy-id -i /home/z80oolong/.ssh/id_rsa.foo.pub -p 12022 u0_a200@192.168.0.1

Password: # (ここで、 Debian noroot のユーザのパスワードを入力)
...
Now try logging into the machine, with "ssh 'u0_a200@192.168.0.1'", and check in:
...

上記の ssh-copy-id コマンドの実行により、接続元の PC 端末によって生成された公開鍵ファイル /home/z80oolong/.ssh/id_rsa.foo.pub が接続先の Debian noroot 環境に転送され、その公開鍵ファイルの内容が、接続先のディレクトリ /home/u0_a200/.ssh 以下にある公開鍵リストファイル authorized_keys の最終行に自動的に追記されます。


接続元の $HOME/.ssh/config を設定する

本節では、 SSH によるリモートログインの接続元となる遠隔の PC 端末にインストールされた SSH クライアントの設定ファイルである ${HOME}/.ssh/config において、接続先の IP アドレスとポート番号及び認証方式の指定等の SSH によるリモートログインを行う上で必要となる設定を記述する手法について述べます。

まず最初に、接続元の遠隔の PC 端末にインストールされた SSH クライアントの設定ファイルである ${HOME}/.ssh/config に下記の記述を追加します。


${HOME}/.ssh/config

...

Host noroot
HostName 192.168.0.1 # Debian noroot 環境が動作している端末の IP アドレス
Port 12022 # Debian noroot 環境上で動作している dropbear のポート番号
PasswordAuthentication no # パスワード認証による接続を行わない
PubkeyAuthentication yes # 公開鍵認証による接続を行う
User u0_a200 # Debian noroot 環境上でのユーザ名
IdentityFile ~/.ssh/id_rsa.foo # 公開鍵認証方式での認証に用いる公開鍵と対になる秘密鍵が存在するパス
RequestTTY yes # 標準入力が TTY の場合はTTYを要求する
...

また、上記の設定に加えて、下記の記述を追記すると、次節で後述する X11 フォワーディングの機能が使用できるようになります。


${HOME}/.ssh/config

Host noroot

HostName 192.168.0.1 # Debian noroot 環境が動作している端末の IP アドレス
Port 12022 # Debian noroot 環境上で動作している dropbear のポート番号
PasswordAuthentication no # パスワード認証による接続を行わない
PubkeyAuthentication yes # 公開鍵認証による接続を行う
User u0_a200 # Debian noroot 環境上でのユーザ名
IdentityFile ~/.ssh/id_rsa.foo # 公開鍵認証方式での認証に用いる公開鍵と対になる秘密鍵が存在するパス
RequestTTY yes # 標準入力が TTY の場合は TTYを要求する
ForwardX11 yes # ← ForwardX11 yes の行を追記する
ForwardX11Trusted yes # ← ForwardX11Trusted yes の行を追記する


公開鍵認証に基づく SSH による接続の確認

本節では、接続先となる Debian noroot 環境において dropbear デーモンを一時的に起動し、パスワード認証に基づく SSH を用いたリモートログインによる接続を確認する手法について述べます。

まず最初に、接続先となる Debian noroot 環境において dropbear デーモンが起動しているかどうかを ps awxu | grep dropbear コマンドを用いて確認します。

  $ ps awxu | grep dropbear

...(略)...
u0_a200 27085 0.0 0.0 2564 0 ? Ss 2月13 0:00 /home/linuxbrew/.linuxbrew/opt/dropbear/sbin/dropbear -p 12022 -d /home/linuxbrew/.linuxbrew/etc/dropbear/dropbear_dss_host_key -r /home/linuxbrew/.linuxbrew/etc/dropbear/dropbear_rsa_host_key -r /home/linuxbrew/.linuxbrew/etc/dropbear/dropbear_ecdsa_host_key -W 65536 -s -w -g -F -E
...(略)...

もし dropbear デーモンが起動していなければ、 dropbear の起動スクリプトである ${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d を下記のように実行して、接続先となる Debian noroot 環境dropbear デーモンを改めて起動し直します。

  $ $HOMEBREW_PREFIX/etc/dropbear/dropbear.d start

そして、接続元となる遠隔の PC 端末上にインストールされた SSH クライアントである ssh コマンドを下記のように起動します。

  $ ssh noroot

...(ここで、秘密鍵と公開鍵の対にパスワードを設定していれば入力を促され、設定していなければそのままログインプロンプトが表示される。)...
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
$

上記のように dropbear の banner が表示され、リモートログインシェルが起動すれば、設定が正常に行われていることが判ります。

また、前節において述べた設定において、 X11フォワーディングの機能を有効にしている場合は、リモートログインシェルから下記のように xeyes コマンドを起動すると、以下の画像のように、接続元となる遠隔の PC 端末の画面に xeyes の実行結果である目玉が表示されます。

 $ xeyes

(xeyes)

最後に、安全のために dropbear デーモンがパスワードを用いた SSH によるリモートログインを抑止するように、 dropbear デーモンの起動スクリプトである ${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d を下記のように修正します。


${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d

...

PORT=12022
SERVER_OPTION="-W 65536 -s -w -g" # (一旦無効にした -s オプションを再度追記する。)
...

以上の設定により、 dropbear デーモンは、接続元からのパスワードを用いた SSH によるリモートログインを抑止します。


接続先の dropbear デーモンの起動の自動化

本章では、 前々章及び前章において設定した SSH によるリモートログインの接続環境を Debian noroot 環境を起動した直後に自動的に起動することが出来るように設定する手法について述べます。

ここで、 SSH によるリモートログインの接続環境を Debian noroot 環境を起動した直後に自動的に起動するには、 Debian noroot 環境においてウィンドウマネージャを起動し、デスクトップ環境を整えるためのシェルスクリプトである /startx.sh に下記のような設定を追記します。


/startx.sh

...

fakeroot-tcp /usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin dbus-daemon --system
# ↓ ${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d を起動するコマンドを追加。念の為に末尾の & を忘れないこと。
/home/linuxbrew/.linuxbrew/etc/dropbear/dropbear.d start &
...
# ↓ xfce-session の直後に /home/linuxbrew/.linuxbrew/etc/dropbear/dropbear.d を停止するコマンドを追加。
dbus-launch --exit-with-session sh -c 'xfce4-session ; /home/linuxbrew/.linuxbrew/etc/dropbear/dropbear.d stop; setsid sh -c "cd /proc/ ; for f in [0-9]* ; do [ \$f = \$\$ ] || kill -9 \$f ; done"' &
...

即ち、 dbus-daemon デーモンを起動している行の直後に、 dropbear を起動する為のシェルスクリプト ${HOMEBREW_PREFIX}/etc/dropbear/dropbear.d を start によって起動し、 Debian noroot 環境をログアウトさせて xfce-session コマンドが終了した直後に、シェルスクリプト /etc/init.d/dropbear を stop によって停止させる設定を追記します。

以上の設定により、 SSH によるリモートログインの接続先となる Debian noroot 環境を起動した後は、自動的に dropbear デーモンが起動し、 Debian noroot 環境と遠隔で繋がる端末で、前々章において設定した SSH によるリモートログインの接続が確認された端末であれば、遠隔の SSH によるリモートログインの接続元の端末から SSH クライアントを用いてリモートログインを行い、 Debian noroot 環境を遠隔から操作することが出来るようになります。


結論

Debian noroot 環境において、各種 Linux ディストリビューションで多く用いられている OpenSSH を導入することは、ディレクトリ /var/run/sshd の権限及び所有者の問題から適切で無かったため、 OpenSSH に代えて、軽量な SSH サーバである dropbearDebian noroot 環境における SSH サーバとして用いて SSH によるリモートログイン環境の構築を行いました。

まず最初に、パスワードによる認証に基づいた SSH によるリモートログインによって、接続元となる SSH クライアント端末から Debian noroot 環境に接続することが可能であることを確認しました。

その後、接続元となる SSH クライアント端末で生成した秘密鍵と公開鍵の対のうち、公開鍵を Debian noroot 環境に転送して、接続元の SSH クライアント端末に適切な設定を行うことにより、公開鍵方式による認証に基づいた SSH によるリモートログインによって、接続元となる SSH クライアント端末から Debian noroot 環境に接続することが可能であることを確認しました。

そして、 Debian noroot 環境の起動時に SSH によるリモートログイン環境が自動的に起動するように、 Debian noroot 環境のウィンドウマネージャを起動するためのシェルスクリプトである /startx.shdropbear デーモンを起動する設定を追記しました。

以上の設定により、 SSH によるリモートログイン環境を構築した Debian noroot 環境を起動した後は、 Debian noroot 環境が動作している Android OS 端末に触れることなく、 SSH クライアントをインストールした遠隔の PC 端末から Debian noroot 環境を操作することが出来るようになりました。

また、 dropbear は SSH によるリモートログインにおける X11 フォワーディングの機能を備えているため、 Debian noroot 環境上で起動する X クライアントソフトを遠隔の PC 端末に表示させることが出来ることも判りました。


謝辞

本稿の記述に当たって、最初に Android OS 端末上で非常に軽快な Debian 環境を実現することを可能にした Debian noroot 環境の開発者である pelya 氏に心より感謝致します。

次に、 dropbear の導入にあたってパッケージ管理システムとして使用した Linuxbrew の導入に関しては thermes 氏による "Linuxbrew のススメ" 及び Linuxbrew の公式ページ等各種関連記事を参考にしました。 thermes 氏及び Linuxbrew の開発コミュニティの各氏に心より感謝致します。

また、 dropbear の設定に関しては、 Dropbear 公式ページを参考にしました。 dropbear の作者である Matt Johnston 氏他 dropbear に関わる全ての方々に心より感謝致します。

そして、 SSH に関する各種設定に関しては、多数の SSH に関連する Web page を参照しました。 SSH による接続に関わる全ての方々に心より感謝致します。

最後に、 Debian noroot 環境Android OS 及び Debian 環境の全ての事に関わる全ての皆様に心より感謝致します。


追記とお断り


2017/10/05 現在の追記とお断り

Debian noroot 環境 における apt-get を用いて導入した dropbear では、 Android OS 5.0 上において正常に動作しない事が判明しましたので、御詫びして訂正すると共に、 Linuxbrew を用いて dropbear を導入する手法に基づいて本稿を大幅に改稿致しました。どうか御了承下さい。


2018/01/22 現在の追記とお断り

64 bit ARM アーキテクチャ等の環境で動作する Debian noroot 環境への Linuxbrew の導入に関する問題の解決手法について加筆を行い、本稿を改稿致しました。どうか御了承下さい。


2018/02/04 現在の追記とお断り

Linuxbrew自動的にインストールするための代替となるスクリプトの作成と公開に伴い、本稿を改稿致しました。どうか御了承下さい。


2018/02/14 現在の追記とお断り

パスワード認証に基づく SSH による接続の設定に関する記述の追記に伴い、本稿を大幅に改稿致しました。どうか御了承下さい。


2018/06/08 現在の追記とお断り

Linuxbrew自動的にインストールするための代替となるスクリプトの更新と、代替スクリプトの実行手法の変更に伴い、本稿を改稿致しました。どうか御了承下さい。


2018/10/11 現在の追記とお断り

Linuxbrew自動的にインストールするための代替となるスクリプトの実行の際に、 Linuxbrew が使用する ruby 処理系をソースコードからコンパイルする際に必要となるパッケージについて訂正を行いました。どうか御了承下さい。


2018/12/29 現在の追記及び御詫びと訂正

"接続元の $HOME/.ssh/config を設定する" の X Forwarding の設定に関する記述において以下の誤りがありました。以下の設定が正当な設定です。


${HOME}/.ssh/config

Host noroot

...()...
# ← (誤) X11Forwarding yes の行を追記する
ForwardX11 yes # ← (正) ForwardX11 yes の行を追記する
# ← (誤) X11ForwardingTrust yes の行を追記する
ForwardX11Trusted yes # ← (正) ForwardX11Trusted yes の行を追記する

以上、皆様に御迷惑を御掛け致しました事を御詫び致しますと共に、本文における接続元の $HOME/.ssh/config の設定を訂正致します。