快轉到主要內容

用Termux將手機變成SSH伺服器,與電腦SSH連線並分享檔案

智慧型手機 Termux教學
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

本文介紹如何在Android手機上用Termux安裝OpenSSH,以SSH連線登入自己的電腦或遠端主機。

Termux還可以在手機上執行SSH伺服器,再透過電腦的SSH連線程式登入手機。這樣就可以用來傳送檔案,達成類似SMB的檔案分享功能,或是用Rsync在二部裝置間自動同步檔案。

這類工具的好處是通訊埠跟SSH共用,且SSH加密通訊能增強傳輸安全性。

順帶一提,手機電腦互連的 KDE Connect也是使用SSH,如果不喜歡打指令的,可以先用KDE Connect這款APP試試看。

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. 電腦端
#

在電腦上安裝OpenSSH的客戶端和伺服器端。

Linux/MacOS請從套件管理員安裝OpenSSH,Windows參照 微軟的說明文件安裝OpenSSH。

別忘記開啟防火牆的22通訊埠。

2. 開始SSH連線
#

首先讓電腦和手機連線到同一個Wifi。

接著在電腦執行以下指令取得電腦的區域IP,

# Linux, MacOS:
ifconfig

# Windows:
ipconfig

電腦區域IP如下圖紅框,可知我的電腦區域IP是192.168.1.103

手機Termux執行此指令取得區域IP:

ifconfig

手機區域IP如下圖紅框,可知我的手機區域IP是192.168.1.101

2.1. 手機SSH連線到電腦
#

  1. 在手機Termux輸入指令,連線到電腦。
#   [使用者帳號@電腦IP]  [通訊埠]
ssh [email protected]  -p 22
  1. 輸入yes繼續,再輸入使用者密碼

  2. 成功登入電腦之後就會進入shell了。輸入exit退出。

2.2. 電腦SSH連線到手機
#

手機通常沒有防火牆問題,但要注意Termux的SSH伺服器通訊埠為8022

  1. 在電腦上開啟終端機,SSH連線到手機:
#   [使用者帳號@手機IP]  [通訊埠]
ssh [email protected] -p 8022
  1. 輸入yes繼續,再輸入使用者密碼,然後就會看到Termux的歡迎訊息,代表登入成功。

3. 透過SSH SCP傳輸檔案
#

Termux基本使用教學有提過termux-setup-storage這個指令,它會將手機的「內部儲存空間」掛載到Termux的storage目錄下,這代表什麼呢?我們可以從Termux存取手機的檔案,包括照片和文件,並透過SCP指令跟電腦互傳檔案。

3.1. 傳手機的檔案到電腦
#

在Termux執行以下指令,將手機相機目錄下的foo.jpeg傳送到電腦Pictures目錄:

#   [通訊埠]  [手機:目錄]                         [電腦:目錄]
scp -P 22   ~/storage/shared/DCIM/foo.jpeg     [email protected]:~/Pictures

3.2. 傳電腦的檔案到手機
#

在Termux執行以下指令,將電腦Pictures目錄的foo.jpeg傳送到手機內部儲存空間的相機目錄:

#   [通訊埠] [電腦:目錄]                              [手機:目錄]
scp -P 22   [email protected]:~/Pictures/foo.jpeg  ~/storage/shared/DCIM/

4. 使用SSHFS掛載遠端目錄
#

SSHFS是利用SSH通道掛載遠端檔案系統的工具,相較於SCP指令只用來傳檔案,SSHFS就比較像是「SMB共用資料夾」的概念,方便傳輸、瀏覽照片影片大量檔案,不會像MTP那樣縮圖都跑不出來。

由於經過加密,要適時調整指令傳輸速度才會快一點,具體參考 Stack Exchange上的回答。電腦端的SSH停用DNS亦可加快傳輸速度。

Linux支援直接掛載SSHFS;Windows和MacOS需要另外安裝軟體,詳情參考 G.T.Wang的網站

4.1. 電腦掛載手機目錄
#

  1. 開啟終端機,新增用於掛載的目錄remote
mkdir ~/remote
  1. 確認手機Termux的SSHD有在運作。將手機內部儲存空間的DCIM目錄掛載到電腦的remote目錄:
#      [手機通訊埠]  [手機:目錄]                             [電腦:目錄]
sshfs -p 8022      [email protected]:storage/shared/DCIM  ~/remote
  1. 輸入yes,再輸入密碼,就可以在remote目錄看到手機DCIM目錄下的檔案了

  2. 若要取消掛載,執行以下指令:

fusermount -u ~/remote

4.2. 手機掛載電腦目錄
#

注意:手機端需要Root權限,且Termux無法直接掛載SSHFS。 沒有Root權限的手機可以改用 質感檔案APP的「新增SFTP連線」,功能跟SSHFS類似。

  1. 用檔案管理APP在手機內部儲存空間新增一個叫做「remote」的目錄。

  2. 下載 EasySSHFS APP

  3. 點左上角Add加入掛載點。接著依序填入本機掛載點名稱、電腦使用者名稱、電腦區域IP、電腦密碼。Identity File跳過。以及要掛載的電腦目錄、本機掛載目錄。

  4. 例如以下範例,將電腦的/home/ivon/Pictures目錄掛載到手機內部儲存空間的remote目錄。

  5. 按右上角Save。左邊選項滑出來,按Mount points回到首頁,接著按下Mount,成功會顯示mounted

  6. 這樣就可以在remote目錄看到電腦的檔案了。如果要取消掛載,回到EasySSHFS按Umount。

5. 用Rsync自動同步照片檔案到電腦
#

Rsync是用來同步檔案的工具,速度很快,在不同裝置間同步檔案走的是SSH通道。另外Termux可以用Crontab或配合Tasker(專有軟體)設置定時執行指令。二者組合起來,就能達成「定時備份手機照片到電腦」的需求。

  1. 首先,Termux安裝Rsync:
pkg install rsync
  1. 電腦也要安裝Rsync。Linux/MacOS透過套件管理員安裝,Windows則是安裝 cwRsync

  2. 開始第一次的同步吧!假設我要將手機內部儲存空間的DCIM目錄同步到電腦上的~/Pictures目錄,並且不刪除本機檔案,那麼在Termux執行以下指令:

#         顯示進度           [手機:目錄]              [電腦:目錄]
rsync -av --progress -e ssh ~/storage/shared/DCIM  [email protected]:~/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執行同步到電腦的指令
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音訊傳送到另一部電腦上。

6.2. 使用SSH key取代登入密碼
#

SSH key是使用加密金鑰進行驗證的連線方式,比密碼驗證安全性要高。如果要用Termux存取自己的Github儲存庫也會用到。

下面示範在手機端產生SSH key,再傳到電腦上。這樣以後手機SSH到電腦就不需要打密碼了。

  1. 在Termux上產生RSA金鑰:
ssh-keygen
  1. 金鑰檔案位於~/.ssh/id_rsa.pub,用以下指令查看,將長長的ssh開頭的金鑰字串複製下來
cat ~/.ssh/id_rsa.pub
  1. 用SSH連線到電腦
  1. 將金鑰寫入至authorized_keys,例如Linux該檔案是位於~/.ssh目錄下:
echo "金鑰字串" >> ~/.ssh/authorized_keys
  1. 登出。之後手機連線到電腦就不用輸入密碼了,可直接連線。

相關文章

Termux崩潰 [Process completed (signal 9)] 錯誤的解決方法
智慧型手機 Termux教學
用Proot-Exagear在Android手機上跑Windows exe程式
智慧型手機 Termux教學 ExaGear Wine QEMU User Mode
Android手機拍攝AVIF/HEIF相片,利用Termux-camera
智慧型手機 Termux教學 AOMedia Video 1

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。