ホネチョコ研究所

/

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ならターミナルを開きます。

# 鍵の生成
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048 -f <名前>
    公開鍵:名前.pub
    秘密鍵:名前
    が生成される

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

# 公開鍵をAndroidへ 表示されたIDにpush
$ adb -s <id> push <公開鍵> /sdcard/Download/<公開鍵>

2.Android(Termux): Termuxで鍵を設定する

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

# 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

3.PC: PCからUSB経由でSSH接続

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

# ポートを設定
$ 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コマンドのみで接続する方法
### 事前にTermux上で`id`コマンドを叩き<ユーザID>を確認しておく必要あり
### 接続
$ ssh -p 8022 -i ~/.ssh/<秘密鍵> <ユーザID>@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接続できます。

4.USB接続のメリット

いちいちAndroidとPCをUSBでつなぐので面倒ですが、いくつかメリットがあります。

一つはWi-Fiによる接続に比べて速いことです、有線で繋がっているのでほぼタイムラグは感じません。

で、もう一つがWi-Fiネットワークへの踏み台にできるというところです。

例えば社内環境に有線LANとWi-Fiのネットワークが二つあったとします。さらにお互いのネットワークはお互いを見られないように設定されてしまっているとします。

安定度やセキュリティ的にメインマシンはおそらく有線のネットワークにつながっていることでしょう。その場合有線PCからWi-Fiのネットワークは見られません。

そんな時有線PCにAndroidを繋げればSSH越しにWi-Fiネットワークのマシンにアクセスできるようになるのです。

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

みたいな感じで繋げられるわけです。USB接続したAndroidを踏み台にして無線でSSHできるということです。

PCにAndroid端末を繋げてはいけないみたいなルールのあるオフィスであれば難しいですが、特別な装置やネットワークの設定をする必要なく有線ネットワーク上からWi-Fiネットワークにアクセスできるのは結構便利です。

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