TermuxにUSB経由でSSH接続する

TermuxはAndroidのソフトウェアキーボードでコマンドを入力しなくてはならないので結構大変です。

コマンドを打ちやすい”CodeBoard”とかを入れてもタッチで入力するには結構限界があります。

そこで、今回はTermuxにUSBケーブル経由でSSH接続する方法を説明します。

SSHで入ればPCのキーボードでコマンドが打てます。

Wi-Fi経由ではなくUSB経由です、有線なのでWi-Fiよりも速いです。

  1. PC: 鍵を生成してAndroidへ送る

まずAndroidとPCを用意してUSBケーブルでつなげます。

設定の開発者モードをONにするのを忘れないでください。

次に、PCで秘密鍵と公開鍵を生成し、Androidに送ります。

Windowsならcygwin、Macならターミナルを開きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 鍵の生成
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048 -f <名前>
公開鍵:名前.pub
秘密鍵:名前
が生成される

# 端末を認識
$ adb devices
## deviceの<id>をメモ

# 公開鍵をAndroidへ 表示されたIDにpush
$ adb -s <id> push <公開鍵> /sdcard/Download/<公開鍵>
  1. Android(Termux): Termuxで鍵を設定する

AndroidでTermuxを起動して、そこで公開鍵を設定します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# opensshのインストール
$ pkg upgrade
$ pkg install openssh

# storageを有効化
## これをやらないとpushした鍵が見つからない
$ termux-setup-storage

# 公開鍵がpushされているか確認
$ ls -l ~/storage/downloads/<公開鍵>

# 公開鍵をauthorized_keysに追加
$ cat ~/storage/downloads/<公開鍵> >> ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

# ssh起動
$ sshd
# 何も出力されないがそれでいい

## PCで~/.ssh/configに接続先を記述したくない場合は下記のコマンドで<ユーザ名>を確認しておく
$ ls -lA ~/.ssh
  1. PC: PCからUSB経由でSSH接続

PCからAndroidにSSHで接続します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ポートを設定
$ adb forward tcp:8022 tcp:8022

# ssh接続
## 方法1 ~/.ssh/configに追加する方法
$ vim ~/.ssh/config
Host xxx
HostName 127.0.0.1
IdentityFile ~/.ssh/<秘密鍵>
Port 8022

### 接続
$ ssh xxx

## 方法2 sshコマンドのみで接続する方法
### 事前に<ユーザ名>がわかっているのが条件
### 接続
$ ssh -p 8022 -i ~/.ssh/<秘密鍵> <ユーザ名>@127.0.0.1


# WARNINGが出る場合は
$ ssh-keygen -R 127.0.0.1:8022
or
$ ssh-keygen -R [127.0.0.1]:8022

これでPCからUSB経由でTermuxに入れます。
PCのキーボードで色々ゴニョゴニョできます。

もちろん~/.ssh/configに書かなくても秘密鍵とホストとポートを指定すれば普通にSSH接続できます。

PCは有線LANしか無い状態で、SSHで入りたい端末は無線でしか繋がらないみたいな場合にこの方法は役に立ちます。

1
PC >=USB(SSH)=> Android >=Wi-Fi(SSH)=> 目的の端末

みたいな場合です。

USB接続したAndroidを踏み台にして無線でSSHできるという感じです。

Wi-Fiで接続する場合はこっちを参考にしてください。