本文介紹如何在Android手機上用Termux安裝OpenSSH,以SSH連線登入自己的電腦或遠端主機。
Termux還可以在手機上執行SSH伺服器,再透過電腦的SSH連線程式登入手機。這樣就可以用來傳送檔案,達成類似SMB的檔案分享功能,或是用Rsync在二部裝置間自動同步檔案。
這類工具的好處是通訊埠跟SSH共用,且SSH加密通訊能增強傳輸安全性。
順帶一提,手機電腦互連的 KDE Connect也是使用SSH,如果不喜歡打指令的,可以先用KDE Connect這款APP試試看。
1. 安裝OpenSSH#
1.1. 手機端#
請先閱讀: Termux基本使用教學
- 在Termux安裝OpenSSH,內含客戶端和伺服器端:
pkg install openssh
- Termux虛擬的使用者帳號一律為
user
,輸入此指令,輸入4位數以上密碼按Enter:
passwd
- 接著在Termux執行此指令,啟動SSH伺服器。
sshd
- 由於退出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連線到電腦#
- 在手機Termux輸入指令,連線到電腦。
# [使用者帳號@電腦IP] [通訊埠]
ssh [email protected] -p 22
輸入yes繼續,再輸入使用者密碼
成功登入電腦之後就會進入shell了。輸入
exit
退出。
2.2. 電腦SSH連線到手機#
手機通常沒有防火牆問題,但要注意Termux的SSH伺服器通訊埠為8022。
- 在電腦上開啟終端機,SSH連線到手機:
# [使用者帳號@手機IP] [通訊埠]
ssh [email protected] -p 8022
- 輸入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. 電腦掛載手機目錄#
- 開啟終端機,新增用於掛載的目錄
remote
mkdir ~/remote
- 確認手機Termux的SSHD有在運作。將手機內部儲存空間的
DCIM
目錄掛載到電腦的remote目錄:
# [手機通訊埠] [手機:目錄] [電腦:目錄]
sshfs -p 8022 [email protected]:storage/shared/DCIM ~/remote
輸入yes,再輸入密碼,就可以在
remote
目錄看到手機DCIM
目錄下的檔案了若要取消掛載,執行以下指令:
fusermount -u ~/remote
4.2. 手機掛載電腦目錄#
注意:手機端需要Root權限,且Termux無法直接掛載SSHFS。 沒有Root權限的手機可以改用 質感檔案APP的「新增SFTP連線」,功能跟SSHFS類似。
用檔案管理APP在手機內部儲存空間新增一個叫做「remote」的目錄。
下載 EasySSHFS APP
點左上角Add加入掛載點。接著依序填入本機掛載點名稱、電腦使用者名稱、電腦區域IP、電腦密碼。Identity File跳過。以及要掛載的電腦目錄、本機掛載目錄。
例如以下範例,將電腦的
/home/ivon/Pictures
目錄掛載到手機內部儲存空間的remote
目錄。按右上角Save。左邊選項滑出來,按Mount points回到首頁,接著按下Mount,成功會顯示
mounted
。這樣就可以在remote目錄看到電腦的檔案了。如果要取消掛載,回到EasySSHFS按Umount。
5. 用Rsync自動同步照片檔案到電腦#
Rsync是用來同步檔案的工具,速度很快,在不同裝置間同步檔案走的是SSH通道。另外Termux可以用Crontab或配合Tasker(專有軟體)設置定時執行指令。二者組合起來,就能達成「定時備份手機照片到電腦」的需求。
- 首先,Termux安裝Rsync:
pkg install rsync
電腦也要安裝Rsync。Linux/MacOS透過套件管理員安裝,Windows則是安裝 cwRsync。
開始第一次的同步吧!假設我要將手機內部儲存空間的
DCIM
目錄同步到電腦上的~/Pictures
目錄,並且不刪除本機檔案,那麼在Termux執行以下指令:
# 顯示進度 [手機:目錄] [電腦:目錄]
rsync -av --progress -e ssh ~/storage/shared/DCIM [email protected]:~/Pictures
輸入密碼後就會開始同步。為了不要每次都打密碼,請參閱下方 設定SSH key取代密碼的步驟。
接著要設定自動備份排程,二擇一。
5.1 Crontab掛在背景#
- Termux執行以下指令:
pkg install nano cronie termux-services
sv-enable crond
crontab -e
- 接著nano應該會自動開啟,在crontab填入以下內容,輸入CTRL+X儲存:
# 每天晚上11:30執行同步到電腦的指令
30 23 * * * /home/gtwang/script.sh --your --parameter
- 通知欄下拉,給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到電腦就不需要打密碼了。
- 在Termux上產生RSA金鑰:
ssh-keygen
- 金鑰檔案位於
~/.ssh/id_rsa.pub
,用以下指令查看,將長長的ssh開頭的金鑰字串複製下來
cat ~/.ssh/id_rsa.pub
- 用SSH連線到電腦
- 將金鑰寫入至
authorized_keys
,例如Linux該檔案是位於~/.ssh
目錄下:
echo "金鑰字串" >> ~/.ssh/authorized_keys
- 登出。之後手機連線到電腦就不用輸入密碼了,可直接連線。