メインコンテンツへスキップ

TermuxでスマホをSSHサーバーにして、PCとSSH接続しファイルを共有する

·
カテゴリー スマートフォン Termuxチュートリアル
タグ OpenSSH
目次

この記事では、Androidスマホ上のTermuxにOpenSSHをインストールし、SSH接続で自分のPCやリモートホストへログインする方法を紹介します。

Termuxではスマホ上でSSHサーバーを実行し、PC側のSSHクライアントからスマホへログインすることもできます。これによりファイル転送ができ、SMBに似たファイル共有機能を実現したり、Rsyncで2台のデバイス間のファイルを自動同期したりできます。

この種のツールの利点は、ポートをSSHと共有できること、そしてSSHの暗号化通信によって転送の安全性を高められることです。

ちなみに、スマホとPCを連携するKDE ConnectもSSHを使用しています。コマンド入力が苦手な場合は、先にKDE Connectアプリを試してみてもよいでしょう。

1. OpenSSHをインストールする
#

1.1. スマホ側
#

先にこちらを読んでください:Termux基本使用チュートリアル

  1. TermuxにOpenSSHをインストールします。クライアントとサーバーが含まれます:
pkg install openssh
  1. Termuxの仮想ユーザーアカウントは常にuserです。次のコマンドを入力し、4桁以上のパスワードを入力してEnterを押します:
passwd
  1. 次にTermuxでこのコマンドを実行し、SSHサーバーを起動します。
sshd
  1. Termuxを終了するとSSHDも一緒に終了するため、SSHDを.profileに追加しておくと、Termux起動時にSSHサーバーも自動起動します:
echo "sshd" >> ~/.profile

1.2. PC側
#

PCにOpenSSHのクライアントとサーバーをインストールします。

Linux/MacOSではパッケージマネージャーからOpenSSHをインストールしてください。WindowsではMicrosoftのドキュメントを参照してOpenSSHをインストールします。

ファイアウォールの22番ポートを開けるのを忘れないでください。

2. SSH接続を開始する
#

まずPCとスマホを同じWifiに接続します。

次にPCで以下のコマンドを実行し、PCのローカルIPを取得します。

# Linux, MacOS:
ifconfig

# Windows:
ipconfig

PCのローカルIPは下図の赤枠の通りです。私のPCのローカルIPは192.168.1.103です:

スマホのTermuxで次のコマンドを実行し、ローカルIPを取得します:

ifconfig

スマホのローカルIPは下図の赤枠の通りです。私のスマホのローカルIPは192.168.1.101です:

2.1. スマホからPCへSSH接続する
#

  1. スマホのTermuxでコマンドを入力し、PCへ接続します。
#   [ユーザーアカウント@PC IP]  [ポート]
ssh ivon@192.168.1.103  -p 22
  1. yesを入力して続行し、その後ユーザーパスワードを入力します。

  2. PCへのログインに成功するとshellに入ります。終了するにはexitを入力します。

2.2. PCからスマホへSSH接続する
#

スマホ側は通常ファイアウォールの問題はありませんが、TermuxのSSHサーバーポートは8022である点に注意してください。

  1. PCでターミナルを開き、スマホへSSH接続します:
#   [ユーザーアカウント@スマホIP]  [ポート]
ssh user@192.168.1.101 -p 8022
  1. yesを入力して続行し、その後ユーザーパスワードを入力します。Termuxの歓迎メッセージが表示されればログイン成功です。

3. SSH SCPでファイルを転送する
#

Termux基本使用チュートリアルではtermux-setup-storageというコマンドに触れました。これはスマホの「内部ストレージ」をTermuxのstorageディレクトリ下にマウントするものです。つまり、Termuxから写真やドキュメントを含むスマホ内のファイルへアクセスでき、SCPコマンドでPCとファイルをやり取りできます。

3.1. スマホのファイルをPCへ送る
#

Termuxで以下のコマンドを実行し、スマホのカメラディレクトリにあるfoo.jpegをPCのPicturesディレクトリへ送信します:

#   [ポート]  [スマホ:ディレクトリ]                [PC:ディレクトリ]
scp -P 22   ~/storage/shared/DCIM/foo.jpeg     ivon@192.168.1.103:~/Pictures

3.2. PCのファイルをスマホへ送る
#

Termuxで以下のコマンドを実行し、PCのPicturesディレクトリにあるfoo.jpegをスマホ内部ストレージのカメラディレクトリへ送信します:

#   [ポート] [PC:ディレクトリ]                         [スマホ:ディレクトリ]
scp -P 22   ivon@192.168.1.103:~/Pictures/foo.jpeg  ~/storage/shared/DCIM/

4. SSHFSでリモートディレクトリをマウントする
#

SSHFSはSSHトンネルを利用してリモートファイルシステムをマウントするツールです。ファイル転送専用のSCPコマンドと比べると、SSHFSは「SMB共有フォルダ」に近い概念で、写真や動画など大量のファイルを転送・閲覧しやすく、MTPのようにサムネイルすら出ないこともありません。

暗号化を経由するため、転送速度を上げるにはコマンドを適宜調整する必要があります。具体的にはStack Exchangeの回答を参照してください。PC側のSSHでDNSを無効化することでも転送速度を上げられます。

LinuxはSSHFSを直接マウントできます。WindowsとMacOSでは追加ソフトが必要です。詳しくはG.T.Wangのサイトを参照してください。

4.1. PCでスマホのディレクトリをマウントする
#

  1. ターミナルを開き、マウント用のremoteディレクトリを作成します。
mkdir ~/remote
  1. スマホのTermuxでSSHDが動作していることを確認します。スマホ内部ストレージのDCIMディレクトリをPCのremoteディレクトリにマウントします:
#      [スマホのポート]  [スマホ:ディレクトリ]                  [PC:ディレクトリ]
sshfs -p 8022      user@192.168.1.101:storage/shared/DCIM  ~/remote
  1. yesを入力し、続けてパスワードを入力すると、remoteディレクトリでスマホのDCIMディレクトリ内のファイルを見られます。

  2. アンマウントする場合は、以下のコマンドを実行します:

fusermount -u ~/remote

4.2. スマホでPCのディレクトリをマウントする
#

注意:スマホ側にはRoot権限が必要で、TermuxではSSHFSを直接マウントできません。 Root権限がないスマホでは、Material Filesアプリの「SFTP接続を追加」を使う方法があります。機能はSSHFSに似ています。

  1. ファイル管理アプリで、スマホ内部ストレージに「remote」というディレクトリを新規作成します。

  2. EasySSHFSアプリをダウンロードします。

  3. 左上のAddを押してマウントポイントを追加します。次に、ローカルのマウントポイント名、PCのユーザー名、PCのローカルIP、PCのパスワードを順番に入力します。Identity Fileはスキップします。さらに、マウントするPC側ディレクトリとローカル側マウントディレクトリも入力します。

  4. 例えば以下の例では、PCの/home/ivon/Picturesディレクトリをスマホ内部ストレージのremoteディレクトリへマウントしています。

  5. 右上のSaveを押します。左側のメニューを開き、Mount pointsを押してホームへ戻り、Mountを押します。成功するとmountedと表示されます。

  6. これでremoteディレクトリにPCのファイルが表示されます。アンマウントしたい場合はEasySSHFSに戻ってUmountを押します。

5. Rsyncで写真ファイルをPCへ自動同期する
#

Rsyncはファイル同期用のツールです。速度が速く、異なるデバイス間のファイル同期はSSHトンネル経由で行われます。さらにTermuxではCrontabを使ったり、Tasker(プロプライエタリソフトウェア)と組み合わせたりして、コマンドの定期実行を設定できます。この2つを組み合わせると、「スマホの写真を定期的にPCへバックアップする」という用途を実現できます。

  1. まず、TermuxにRsyncをインストールします:
pkg install rsync
  1. PCにもRsyncをインストールする必要があります。Linux/MacOSではパッケージマネージャーからインストールし、WindowsではcwRsyncをインストールします。

  2. 最初の同期を開始しましょう。スマホ内部ストレージのDCIMディレクトリをPC上の~/Picturesディレクトリへ同期し、ローカルファイルを削除しないとします。その場合、Termuxで以下のコマンドを実行します:

#         進捗を表示           [スマホ:ディレクトリ]     [PC:ディレクトリ]
rsync -av --progress -e ssh ~/storage/shared/DCIM  ivon@192.168.1.103:~/Pictures
  1. パスワードを入力すると同期が始まります。毎回パスワードを入力しないようにするには、下のSSH keyを使ってログインパスワードを置き換える手順を参照してください。

  2. 次に自動バックアップのスケジュールを設定します。どちらか一方を選びます。

5.1 Crontabをバックグラウンドで動かす
#

  1. Termuxで以下のコマンドを実行します:
pkg install nano cronie termux-services
sv-enable crond
crontab -e
  1. するとnanoが自動で開くはずです。crontabに以下の内容を入力し、CTRL+Xで保存します:
# 毎晩11:30にPCへ同期するコマンドを実行する
30 23 * * * /home/gtwang/script.sh --your --parameter
  1. 通知欄を下に引き、TermuxのACQUIRE WAKELOCkをタップします。これでTermuxを開いている限り、時間になるとRsyncバックアップが自動実行されます。

5.2. Taskerと組み合わせて自動スケジュールする
#

Tasker APPをインストールし、さらにTermux Taskerをインストールします。指定した時間にRsyncコマンドを実行する条件は自分で設定してください。

6. その他のTermux SSHの用途
#

6.1. SSH Forwarding
#

SSH Tunnelを通じて、Xサーバーのグラフィック画面やPulseAudio音声を別のPCへ転送できます。

6.2. SSH keyを使ってログインパスワードを置き換える
#

SSH keyは暗号鍵を使って認証する接続方式で、パスワード認証より安全性が高いです。Termuxから自分のGithubリポジトリへアクセスする場合にも使います。

以下ではスマホ側でSSH keyを生成し、それをPCへ送る手順を示します。これで今後スマホからPCへSSH接続するときに、パスワード入力が不要になります。

  1. TermuxでRSA鍵を生成します:
ssh-keygen
  1. 鍵ファイルは~/.ssh/id_rsa.pubにあります。以下のコマンドで表示し、sshで始まる長い鍵文字列をコピーします。
cat ~/.ssh/id_rsa.pub
  1. SSHでPCへ接続します。
ssh ivon@192.168.1.103
  1. 鍵をauthorized_keysへ書き込みます。例えばLinuxでは、このファイルは~/.sshディレクトリ下にあります:
echo "金鑰字串" >> ~/.ssh/authorized_keys
  1. ログアウトします。以後、スマホからPCへ接続するときはパスワード入力なしで直接接続できます。

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。