LoginSignup
7
5

【UserLAnd】AndroidスマホにWi-Fi経由でSSH接続する方法

Last updated at Posted at 2024-02-09

はじめに

この記事ではパソコンからSSH接続でAndroidスマートフォンにアクセスすることを目的とします。

SSH接続するには「openssh」というアプリが入っていれば使えます。Windowsにもデフォルトで入るようになったので、今回はWindowsでSSH接続してみます。
ただし、WindowsからSSH接続するにはpowershellではだめで、Git Bash を起動しなければなりません。

スマートフォンではsshどころかターミナルが使えないため、ターミナルが使えるアプリをインストールします。

以前は「termux」というアプリが主流でしたが現在はplayストアで更新できない状態が続いているため、現在おすすめのアプリは UserLAnd というアプリになります。

以前Qiitaで同じような記事を書いていました1。このときは「termux」を取り上げていましたが、今回はそれの「UserLAnd」版となります。

UserLAndはroot化しなくてもLinuxコマンドが扱える、非常に軽いオープンソースアプリです。

普通のLinuxのようにsudo apt installでアプリをインストールできるので、iproute2nmapをインストールします。

UserLAndはアプリ起動時にSSHデーモンが起動して自動でポートが開放されるので、ip -4 aでIPアドレスを確認したあと、
nmap localhostでポートを確認してメモします。
その後、パソコン側でssh -p ポート番号 -i SSH秘密鍵 userland@IPアドレスと打つとSSH接続ができます。

ところでSSH接続をするには鍵が必要です。
パソコン側でssh-keygenコマンドで鍵を作成できます。鍵は「秘密鍵」と「公開鍵」がペアで作成されるので、秘密鍵はPC:~/.sshに保管し、公開鍵は何らかの手段でスマートフォンに送りuserland@localhost:~/.ssh/authorized_keysに追記します。こうすることで、公開鍵に対応する秘密鍵を所有しているパソコンのみがAndroidスマートフォンにSSH接続できるようになります。

使うもの

  • パソコン(今回はWindows)
  • Andoroidスマートフォン

SSH接続への手順

【前準備】

PC

1.Git Bashをインストールする

WindowsにGit Bashをインストールする方法はいくつかありますが、一番簡単な方法は Scoop というパッケージ管理ツールを使う方法です。

まずはscoopをインストールします。
powershellを開き、以下のコマンドをそのままコピペして貼り付けてください。

scoopのインストール
PS C:\Users\user> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
PS C:\Users\user> irm get.scoop.sh | iex

これでGitがインストールできます。以下のコマンドを入力すると、C:\Users\ユーザー名\scoop\appsにGitがインストールされ、Git Bashが使えるようになっています。

gitをインストールする
PS C:\Users\user> scoop install git

Androidスマートフォン

1.「UserLAnd」をインストール

UserLAndの名前の由来は?

少し話が逸れますが、「UserLAnd」の名前の由来はご存知でしょうか?

これは「OSが動作するのに必要な、カーネル以外の部分」2を指す言葉です。

ユーザーランド(userland)とは、実行中のオペレーティングシステム(OS)環境の中で、中核部であるカーネル以外の要素のこと。一般ユーザーの権限で操作できる領域であり、シェルやコマンド、アプリケーションなどが含まれる。
出典: ユーザーランドとは - 意味をわかりやすく - IT用語辞典 e-Words

OSは二種類の構造で出来ています。それが「カーネル」と「ユーザーランド」です。

  • OS
    • カーネル
    • ユーザーランド

カーネルとはOSのコアで、最も有名なカーネルが「Linux」です。Linuxは 「オープンソース」 のカーネルであったことが画期的であり、爆発的に広まりました。
一方、それ以外の部分「ユーザーランド」に関してはLinuxは関わりがありません。そのため、LinuxOSというのはLinux Distribution(Linux配布物)と一般的に呼ばれます。

Linux Distributionとは、「Linuxカーネル,Cライブラリ「glibc」などのGNUソフトウエア,各種フリーソフトを組み合わせて,デスクトップやサーバーなどの環境を快適に使えるようにしたOS(オペレーティング・システム)」3のことです。
つまり言い換えると、「Linuxカーネルと独自のユーザーランドを一纏めにしたもの」 という意味です。

スマートフォンアプリ「UserLAnd」は、どのLinuxディストリビューション(ユーザーランド)を使うかを選択できるアプリです。
一般的に有名な「Ubuntu」や「Debian」以外にも、「Arch」、「Alpine」、「Kali」が使えます。

2.Ubuntuを選択

アプリを起動すると、以下のような画面になります。

userland-android-wifi-ssh-connection_userland-start_01.png

「Session」と「Filesystems」タブを開くと、初期画面では何も写っていません。

userland-android-wifi-ssh-connection_userland-start_02.png userland-android-wifi-ssh-connection_userland-start_03.png

「Ubuntu」を選択します。

userland-android-wifi-ssh-connection_userland-start_04.png

すると、「Please select a desktop enviroment:」と聞かれますので、一番上を選んでください。

userland-android-wifi-ssh-connection_userland-start_05.png

次に、「Please select a connection type:」と聞かれますので、「Terminal」を選んでください。
「Always use this setting」チェックはどちらでも構いません。

userland-android-wifi-ssh-connection_userland-start_06.png

すると、以下のような「Setting up」画面となるので、しばらくお待ちください。

userland-android-wifi-ssh-connection_userland-start_07.png

しばらく待っていると、以下のような画面が表示されます。
これが「ターミナル」です。
ここで、Androidの設定をしていきます。

userland-android-wifi-ssh-connection_userland-start_08.png

ちなみに、画面を戻すと、先程何も表示されていなかった「Sessions」と「Filesystems」にubuntuが表示されています。

userland-android-wifi-ssh-connection_userland-start_09.png userland-android-wifi-ssh-connection_userland-start_10.png
3.必要なパッケージをインストールする

まず最初にupdateとupgradeを済ませます。

updateとupgrade
userland@localhost:~$ sudo apt update
userland@localhost:~$ sudo apt upgrade

更新が済んだら、必要なアプリをインストールします。

必要なアプリをインストール
userland@localhost:~$ sudo apt install iproute2 # IPアドレスの確認
userland@localhost:~$ sudo apt install nmap # ポート番号の確認
4.現在ディレクトリを確認する

pwdと入力して、現在ディレクトリを確認しておきます。
UserLAndのターミナル上では、/home/userland/にいることが分かります。

現在ディレクトリの確認
userland@localhost:~$ pwd
/home/userland

【SSH接続の準備】

PC

1.秘密鍵と公開鍵を作る

ssh-keygenと入力すると、現在ディレクトリ以下に、秘密鍵と公開鍵を作ることが出来ます。
秘密鍵とは、その名の通り誰にも見せてはいけない鍵で、通常~/.sshフォルダに置くことが多いです。
公開鍵とは、通信したい相手に渡す鍵で、今回はDropboxを経由して渡します。

今回使う暗号化方式は「エドワーズ曲線デジタル署名アルゴリズム - Wikipedia」というもので、 「ed25519」 と指定します。

以下は、オプションの説明です。

  • -tオプション: 暗号化方式を指定に使います。ed25519と指定します。
  • -fオプション: 鍵に名前を付けます。今回はAndroidスマートフォンとの暗号化接続なので「id_ed25519_android」と名付けます。

まずは、.sshフォルダを作成して、移動します。

.sshフォルダを作成して、移動
PowerShell 7.4.1
PS C:\Users\user> mkdir .ssh

    Directory: C:\Users\user

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----   2024/02/04 日曜日    20:45                .ssh

PS C:\Users\user> cd .ssh

次に鍵を作成します。
今回はテストなので、パスフレーズの入力は省略します(何も入力せずEnter)。

秘密鍵と公開鍵を作成する
PS C:\Users\user\.ssh> ssh-keygen -t ed25519 -f id_ed25519_android
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_ed25519_android
Your public key has been saved in id_ed25519_android.pub
The key fingerprint is:
SHA256:フィンガープリント ユーザー名@ホスト名
The key's randomart image is:
+--[ED25519 256]--+
|       イ        |
|       メ        |
|       |        |
|       ジ        |
|                 |
|                 |
|                 |
|                 |
|                 |
+----[SHA256]-----+

生成した鍵を確認します。
無事生成できた事がわかったら、
.pubという拡張子がついている方が公開鍵です。

秘密鍵と公開鍵の確認
PS C:\Users\user\.ssh> ls
id_ed25519_android
id_ed25519_android.pub
2.公開鍵をスマホに送る

送る手段は何でもいいです。今回はDropboxを使いました。Dropboxを通じて、スマートフォンのどこかにid_ed25519_android.pubを保存します。
今回はスマートフォンの「ダウンロードディレクトリ」に保存しておきます。

Androidスマートフォン

1.authorized_keysに公開鍵を登録する

他のクライアントから受け取った公開鍵は全て、中身をauthorized_keysファイルにコピーして運用します。
そのため、まずはauthorized_keysとそれを保管する.sshフォルダを作成します。

ホームディレクトリ下に~/.sshを作って、パーミッションを700にします。

「/home/userland」に「.ssh」を作る
userland@localhost:~$ mkdir .ssh
userland@localhost:~$ chmod 700 .ssh

次に、.sshフォルダ内にauthorized_keysを作って、パーミッションは600にします。

「/home/userland/.ssh」にauthorized_keysを作る
userland@localhost:~$ touch .ssh/authorized_keys
userland@localhost:~$ chmod 600 .ssh/authorized_keys

Dropboxを経由して、ダウンロードフォルダに「id_ed25519_android.pub」に置いたことを確認した後、中身をauthorized_keysファイルに追記します。
>はリダイレクトを意味しており、二個重ねると追記となります。

authorized_keysに公開鍵を追記する
userland@localhost:~$ cat /Downloads/id_ed25519_android.pub >> ~/.ssh/authorized_keys
2.IPアドレスを確認する

ip -4 aと入力するとIPアドレスが分かる。

  • -4はIPv4のこと。
  • aはaddress(住所)の略。
IPアドレス(ipv4)の確認
userland@localhost:~$ ip -4 a

コマンドを打つと、loとwlan0が出るので、wlan0のIPアドレスを確認する。

  • loは「ローカルループバック」と呼ばれる自分自身を指すIPアドレス。常に127.0.0.1となる。
  • wlan0は無線LANアダプタ.。inetと書かれている欄がIPアドレスとなる。
3.ポート番号を確認する

UserLAndは起動しただけでsshdが起動しているため、開いているポート番号を確認する。

ポート番号の確認
userland@localhost:~$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2024-02-08 07:31 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0018s latency).
Not shown: 998 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
2022/tcp  open  down

Nmap done: 1 IP address (1 host up) scanned in 1.62 seconds

ポートは全部で1000個あるが、Not shown: 998 closed portsとなり2つだけ閉じていないことが分かる。
開いているポート番号は222022であることが分かったので、メモをする。このうち、2022を使います

IPアドレスが島の住所なら、ポートは島にたくさんある港であり、 「このデバイスにSSH接続をしたいのであればこの2022番のポートを使ってください」 という意味になります。

SERVICEとは?

ちなみに、ポートの各項目の説明は以下の通り。

  • PORT: 開いているポート番号
  • STATE: ポートが開いているか、閉じているかの状態
  • SEVICE: nmapがサービスの名前を自動で判断している

上記はSEVICEが「down」となっているが、この名前はIANAが登録したサービス名を参照している。

上記のサイトを見ると、ポート番号が「2022」でプロトコルが「tcp」のサービス名を「down」と名付けている事がわかる。nmapをこれを元にSEVICEを決定している。

ちなみに、IANAとは「Internet Assigned Numbers Authority」の略4です。

IANAは、南カリフォルニア大学情報科学研究所(ISI)のJon Postel教授が中心となって始めたプロジェクトグループで、 ドメイン名、 IPアドレス、 プロトコル番号など、 インターネット資源のグローバルな管理を行っていました。

(中略)

その後、 1998年10月に国際的な非営利法人 ICANN が設立されてインターネットの管理体制が変化し、 2000年2月にはICANN、南カリフォルニア大学、 及びアメリカ政府の三者の合意により、 IANAが行っていた各種資源のグローバルな管理の役割は ICANNに引き継がれることになりました。 2002年現在IANAは、ICANNにおける機能の名称として使われています。
出典: インターネット用語1分解説~IANAとは~ - JPNIC

参考サイト

【SSH接続開始】

PC

UserLAndを起動したことでポートが開放され、さらに公開鍵をスマートフォンに送りauthorized_keysへの登録も完了したので、いよいよSSH接続を開始できます。

SSH接続をする書式は以下の通りです。IPアドレスには、ip -4 aで調べたIPアドレスを入力してください。

SSH接続開始の書式
PS C:\Users\user\.ssh> ssh -p ポート番号 -i 使用する秘密鍵 userland@IPアドレス

しかし、ここで一つ注意点があります。上記のコマンドのようにPowershellでSSH接続しようとすると、以下のような表記が出てタイムアウトになります。

スマートフォンにSSH接続をしようとするが、タイムアウトになる
PS C:\Users\user\.ssh> ssh -p 2022 -i id_ed25519_android userland@IPアドレス
ssh: connect to host IPアドレス port 2022: Connection timed out

ここで、Git Bashを使うことになります。
powershell上でbashと入力すると、ユーザー名@PC名 MINGW64 ~$に移行します。

Git Bashに移行
PS C:\Users\user> bash

user@PC MINGW64 ~
$

ここで同じようにコマンドを入力すると、以下のように接続できます。
また、初めて接続すると以下のようにフィンガープリントが提示され、本当に接続していいかと聞かれるので、「yes」と入力したください。

スマートフォンにSSH接続をする
user@PC名 MINGW64 ~
$ ssh -p 2022 -i id_ed25519_android IPアドレス
The authenticity of host '[IPアドレス]:2022 ([IPアドレス]:2022)' can't be established.
ECDSA key fingerprint is フィンガープリント.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[IPアドレス]:2022' (ECDSA) to the list of known hosts.
userland@localhost:~$ 

一度接続すると、フィンガープリントは~/.ssh/known_hostsファイルに保存され、次回移行の接続からは何も聞かれなくなります。

接続するとパソコンのターミナル上でAndroidを操作出来るようになります。
SSH接続をやめるにはexitコマンドを打ちます。
試しに、dowloadsディレクトリに「test.txt」というファイルを作成します。

パソコンからAndroidを操作する
$  ssh -p 2022 -i id_ed25519_android userland@IPアドレス
userland@localhost:~$ whoami
userland
userland@localhost:~$ pwd
/home/userland
userland@localhost:~$ cd /Downloads
userland@localhost:/Downloads$ touch test.txt
userland@localhost:/Downloads$ exit
logout
Connection to IPアドレス closed.

Androidスマートフォン

パソコンから作成した「test.txt」があるかをUserLAndで調べます。

「test.txt」があるかをUserLAndで調べる
userland@localhost:~$ pwd
/home/userland
userland@localhost:~$ find /Downloads/test.txt
/Downloads/test.txt

きちんと「ダウンロード」フォルダ以下に作られていることが分かります。

まとめ

これでパソコンからAndroidスマートフォンにSSH接続することができます。以前は「Termux」を使用していましたが、Playストアで更新できなくなって久しいため、「UserLAnd」を使ってSSH接続する方法をあらためてまとめました。

以前の記事は以下からご覧ください。

今回は手間を省く為に鍵のパスフレーズを作りませんでしたが、実際の運用では作った方が良いです。

SSH接続が出来たことでscpやsftpもスマホとパソコン間で行えるようになります。

  1. AndroidスマホにWifi経由でSSH接続する方法 #Android - Qiita

  2. UserLandとは何? わかりやすく解説 Weblio辞書

  3. Linuxディストリビューション | 日経クロステック(xTECH)

  4. インターネット用語1分解説~IANAとは~ - JPNIC

7
5
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
7
5