物理キーボードが付いたAndroid端末「Gemini PDA」上のLinux環境として、これまではTermuxを使っていたが、UserLAndへ乗り換えしようと思う。
しかしながらデフォルトだとSSHログインに関してやや問題があるようだ。UserLAndアプリ内で選択できるUbuntuを起動した後のデフォルト状態では、dropbearというSSHサーバが「rootログインとパスワード認証が有効な設定」で2022/tcpにて待ち受けている。Gemini PDAのLAN内ローカルIPアドレスを「192.168.1.XXX」とすると、次のコマンドでパスワード認証が有効だと確認できる。
$ nmap -p 2022 192.168.1.XXX
(snip)
PORT STATE SERVICE
2022/tcp open down
$ ssh -o PreferredAuthentications=password -p 2022 userland@192.168.1.XXX
userland@192.168.1.XXX's password: # パスワードが聞かれる、つまり有効
この状態では、Gemini PDAを接続したWi-Fiネットワーク等からのSSHログインのパスワード試行攻撃が成功してしまう可能性がゼロではなさそうなので、SSHログインを公開鍵認証のみに限定する設定方法を模索した。
なお、上記設定を行うことにより、UserLAndに内蔵のターミナルアプリからUbuntu環境へログインすることも不可能になる (このログインはパスワード認証を用いているからだろうと推測)。Gemini PDAから直接にUbuntu環境へログインする方法は、別途JuiceSSHなどのターミナルアプリをGemini PDAへインストールして、公開鍵認証でlocalhostへSSHログインする形へと変わる。セキュアになるのと引き換えに、少々ややこしくなることに注意。
種類 | 名称 | バージョン等 |
---|---|---|
ハードウェア | Gemini PDA | Android 8.1.0 |
アプリ | UserLAnd | 3.0.0 (2022-06-30) |
アプリ上の環境 | Ubuntu | 20.04.4 LTS (Focal Fossa) |
アプリ | JuiceSSH | 3.2.2 (2021-02-04) |
以下、「Ubuntu環境」とはUserLAndの上に構築するUbuntu環境を指す。
Welcome to Ubuntu in UserLAnd!
userland@localhost:~$
## Android 12以前 (追記 2023-01-21)
sudo apt update
sudo apt install iproute2 vim
ip a | grep wlan0 # 現在のIPアドレス(192.168.1.XXX)を確認する
## Android 13以降 (追記 2023-01-21)
sudo apt update
sudo apt install net-tools vim
ifconfig | grep -A 1 wlan0 # 現在のIPアドレス(192.168.1.XXX)を確認する
~/.ssh/id_ecdsa.pud
を次のように登録するmkdir ~/.ssh && chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys # 別マシンの公開鍵(ed25519は非対応, rsaやecdsaは対応)を追記する
chmod 600 ~/.ssh/authorized_keys
ssh -o PreferredAuthentications=publickey -i ~/.ssh/id_ecdsa -p 2022 -l userland 192.168.1.XXX
項目 | 内容 |
---|---|
ニックネーム | (任意) |
ユーザ名 | userland |
パスワード | |
プライベートキー | Key Format = ECDSA, キー強度: 384bit (初期値のまま), パスフレーズ: 任意のもの |
~/.ssh/authorized_keys
に追記する項目 | 内容 |
---|---|
ニックネーム | UserLAnd@localhost |
アドレス | 127.0.0.1 |
認証情報 | 上記で作成したecdsa形式のものを選択 |
ポート | 2022 |
本項の手順を実施すると、Ubuntu環境へ、UserLAndに内蔵のターミナルアプリからログインできなくなることに注意。
/support/startSSHServer.sh
を編集する$ cd /support/
$ sudo cp -a ./startSSHServer.sh{,.original}
## 下記のdiffのようにdropbearの実行部分を編集する
$ sudo vim ./startSSHServer.sh
## 「-w Disallow root logins」「-s Disable password logins」を有効化
$ diff ./startSSHServer.sh{.original,}
12c12,13
< dropbear -E -p 2022
---
> #dropbear -E -p 2022
> dropbear -Ews -p 2022
[Process completed (code 1) - press Enter]
と出るがこれはパスワード認証が無効化されたことによるもので意図通り。Enterを押す$ ssh -o PreferredAuthentications=password -p 2022 userland@192.168.1.XXX
userland@192.168.1.XXX: Permission denied (publickey). # パスワード認証が受け付けられない
$ ssh -o PreferredAuthentications=publickey -i ~/.ssh/id_ecdsa -p 2022 userland@192.168.1.XXX
userland@localhost:~$ # 公開鍵認証ではログインできる
sudo apt update && sudo apt upgrade
sudo dpkg-reconfigure tzdata # タイムゾーンをAsia/Tokyoに設定する
sudo apt install bash-completion neofetch nmap openssh-client # お好みのもの