Android 系統中如何執行 sshd?

2021-07-25 19:18:21 字數 2406 閱讀 5170

本文和大家分享的主要是android系統中執行

sshd

學習android

新的 z5c 到手。拿 root 裝軟體。然後發現乙個很重要的事情:我之前在 z3c + android 4.4.4 上用得好好的 

rooted ssh/sftp daemon

,在登入的時候報了這麼個錯:

cannot link executable: "/system/lib/libc++.so" is 32-bitinstead of 64-bit

page recordfor0*********xx wasnotfound (block_size=32)

網上搜了一下,

解決方法

是有的,要重新編譯 dropbear。可我之前研究過,我這軟體使用的 dropbear 是乙個 

修改版

於是想找個新的 sshd。之前我是

使用的sshdroid

。後來它需要付費版才能使用金鑰認證了……而我的要求就兩點:可以以 root 身

份登入,並且支援金鑰認證。在 play 商店裡能找到的 sshd 我都試過了一遍,竟然沒乙個能滿足這麼基本的需求的…………

之所以需要以 root 身份登入,而不是登入之後再獲取 root,是因為跑命令時 su 之後很容易出現奇怪的問題,和緩衝、終端控制有關。

一開始使用

的是 socat + 

tinyssh

的方案。這個方案我之前在光貓上實現過,tinyssh 的**很少,很容易編譯和修改。socat 直接用 

之前編譯的版本

就可以了。因為 android 畢竟不是完整的 linux userland,所以得把 tinyssh 改一改,主要是使用者主目錄和預設 shell 的部分。我就直接硬編碼進 root 的配置了

。然後寫個 shell 指令碼來啟動:

#!/system/bin/sh

export android_root=/system android_data=/data

path=/system/xbin:/su/xbin:/su/bin:/sbin:/vendor/bin:/system/sbin:/system/bin

socat tcp-l:port,reuseaddr,fork exec:'tinysshd /data/tinyssh/keydir' &

這樣就可以了。只支援 ed25519 金鑰登入,挺好的。

然而,用著用著就發現有點小問題:socat 對經由網路的資料進行**,有點低效;tinyssh 不支援連線復用,在乙個會話中收到新的連線請求時會直接退出;還沒有 scp 命令……

一開始我去 dropbear 那邊編譯了乙個 scp。編輯好配置檔案、開始 make 的時候,敲「make programs=scp」就可以編譯出乙個 scp 命令了。然後我就想,既然都用上 dropbear 了,要不就都用了吧。於是把 dropbear 也編譯出來了。不是很順利,主要是以下幾個事:

. 改路徑。各種路徑,host key 的,pid 檔案的,預設 path,還要禁用掉 lastlog 和 syslog 什麼的

. 改使用者資訊。預設 shell、主目錄。不要檢查 /etc/shells。剛剛發現我還不小心把其中兩行**交換了,是說怎麼退出的時候會段錯誤呢 _(:з」∠)_

. dropbear 的構建系統不支援 out-of-tree 構建,也就是不能像我習慣的那樣,「mkdir build-android」然後進去「../configure」 :-(

另外就是,dropbear 不支援 ed25519 key,於是我只好用 rsa key 了(dss 有問題;openssh 的 ecdsa 實現也有問題) :-(

弄好之後同樣寫個 shell 指令碼方便呼叫:

#!/system/bin/shexport android_root=/system android_data=/data

/system/xbin/dropbear -r -p port

然後,啟動服務的事情。我發現改 /init.rc 不管用。這個是 initramfs,每次重啟之後就恢復原狀了……我懶得去重新打 initamfs 的包了,就每次重啟系統之後接上 usb 線,然後 adb shell進去跑指令碼……還好 z5c 跟 z3c 不一樣,usb 口在外邊,很好插。

終於把 remote root shell 弄好了,接下來就是各種 rsync 和 scp 傳檔案改配置什麼的了,一是複製各種軟體的配置檔案和資料,二是備份,三是把檔案拿電腦上研究、編輯,方便啊!sony 有個「換機助手」軟體,但是它不能在加密了的手機上使用……

最後,還留下了乙個問題:同樣的環境,同樣是 wi-fi 傳輸,我的電腦和 z3c 之間傳輸速度能達到 4mib/s,但是 z5c 卻只有 300kib/s 左右的樣子……

依雲's blog

如何在Android系統上執行C 程式

有兩種方式 使用 ndk,通過 jni 的方式來呼叫 c 的方法。這部分知識點很多,可以參考 android ndk 從入門到精通 彙總篇 android 的本質是基於 linux 系統的,我們是可以直接執行 c 的程式 使用 ndk 編譯生成在 android 系統上可執行的執行程式 把編譯好的可...

執行mysql指令碼 mysql下如何執行sql指令碼

首要步驟 一般可省略 開啟mysql服務 預設是開機時就自動執行了 控制面板 管理工具 服務,在裡面找到名稱為mysql的項,雙擊就可看它的服務狀態是啟動還是停止,把它設為啟動 連線mysql 在命令列下輸入 mysql h localhost u root p回車,然後輸入密碼即可 或直接執行my...

如何從Android系統中刪除「無用」程式

如何從android系統中刪除 無用 程式 2010年10月18日 此操作有可能會對系統產生影響,建議先進行備份後再操作。前提條件 1 作業系統建議為windows xp 32位windows vista 32位windows 7 2 usb資料線 desire電量高於30 電腦系統能正確識別des...