Termux on AndroidのSSHサーバに接続する方法

2017年10月26日

AndroidでLinuxのコマンドが使える「Termux」で、SSHサーバーを起動してPCから接続することができます。

Termuxのインストールについては、以下の記事をご覧ください。

通常のLinuxと異なり、Termuxはシングルユーザーシステムです。なので、インストール時にもユーザー名やパスワードは設定しませんでした。SSHで接続する場合、ユーザ名は何を指定しても無視され、Termuxが自動的に作成したユーザーが使われます。また、パスワード認証には対応しておらず、事前に登録した公開鍵で認証を行います。この記事では、Linux PC(Linux on Windowsも含みます)での鍵の作成、公開鍵のTermuxへの登録、Linux PCからTermuxへのSSH接続の方法を解説します。

鍵の作成

PCで既に使っているSSHの鍵があるなら、それを使ってもいいでしょう。無い場合や、Termux用に専用の鍵を作成する場合は、Linux PC(Termuxではなく接続元になるPC)で「ssh-keygen」コマンドを実行します。以下は、2017年時点で、最も強固でパフォーマンスも良いとされている「Ed25519鍵」を用いる例です。「ssh-keygen -t ed25519」と実行しています。

$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/lintaro/.ssh/id_ed25519):     
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/lintaro/.ssh/id_ed25519.
Your public key has been saved in /home/lintaro/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:MnM7r8IqwugnLCTEnSHjuPoTk6mdmSMExw+r5cOkrwQ [email protected]
The key's randomart image is:
+--[ED25519 256]--+
|                 |
| o .             |
|+.+ o            |
|o++o             |
|Eo *  + S        |
|+oO .  = .       |
|[email protected] * .  o        |
|@+%.  o  o       |
|+B==.. ....      |
+----[SHA256]-----+

ファイル名は、デフォルトで「~/.ssh/id_ed25519」となっています。Termux専用の鍵にするなら、別の名前にしたほうが分かりやすいでしょう。パスフレーズは空にせず設定しておいてください。pwgenを使って決めてもいいでしょう。

ここでは、デフォルトのファイル名で「~/.ssh/id_ed25519」(秘密鍵)と「~/.ssh/id_ed25519.pub」(公開鍵)を生成したとして解説を進めます。

公開鍵の登録

Linux PCから、SSHの公開鍵(前述の例なら「id_ed25519.pub」)を何らかの手段でAndroidにコピーします。SDカードを介してコピーしてもいいですし、KDE Connectで連携済みなら、簡単に転送できるでしょう。

ここでは、Androidの「ダウンロード」ディレクトリに入れたとします。Termuxのセットアップ時に「termux-setup-storage」コマンドを実行していれば、ダウンロードディレクトリは「~/storage/download/」でアクセスできるはずです。Termuxからコピーした公開鍵が見えることを確認してみましょう。

$ ls -l ~/storage/downloads/id_ed25519.pub 
-rw-rw----    1 root     sdcard_r       105 Oct 26 15:28 storage/downloads/id_ed25519.pub

確認できたら、以下のように実行します。公開鍵のファイル名はご自身のものに合わせて実行してください。

mkdir ~/.ssh
cat ~/storage/downloads/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

これで準備ができました。Termuxで「sshd」を実行しましょう。

$ sshd

何も出力されませんが、バックグラウンドで起動しています。通常のLinuxならば起動時に自動的に「sshd」が起動しますが、Termuxには起動処理は無いため、このように手動で起動します。

Linux PCから接続するために、Termuxが動作しているAndroidのIPアドレスを確認しましょう。Termuxで確認するなら、以下のように「ip -4 a」と実行します。

$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.111.101/24 brd 192.168.111.255 scope global wlan0
       valid_lft forever preferred_lft forever

この出力例では、「192.168.111.101」がAndroidのIPアドレスとなります。Linux PCから、以下のように実行して接続できるはずです。

$ ssh -p 8022 192.168.111.101
The authenticity of host '[192.168.111.101]:8022 ([192.168.111.101]:8022)' can't be established.
ECDSA key fingerprint is SHA256:b2AGSEqopGrYIhIUtKfXcrJgEbvgrNXlV6nSnNjxBqk.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.111.101]:8022' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/lintaro/.ssh/id_ed25519': 
Welcome to Termux!

Online help:     https://termux.com/help
Community forum: https://termux.com/community
IRC channel:     #termux on freenode
Gitter chat:     https://gitter.im/termux/termux
Mailing list:    [email protected]

Search packages:   pkg search <query>
Install a package: pkg install <package>
Upgrade packages:  pkg upgrade
Learn more:        pkg help
bash-4.4$ 

SSHサーバーは通常22番ポートで接続しますが、Termuxでは1024以下のポートが使えないため、デフォルトで8022番ポートを使うよう設定されています。そのため、上記のように「-p 8022」とポート番号を指定して実行します。

更新履歴

2017-10-30 Android 6.0とUbuntu 17.10で動作を確認