【MindStudio】【OpenSSH】海思SOC環境準備(linux + android)
1?????? 背景
當前Mindstudio及配套ADK需要從ADX切換到SSH,Mindstudio需要通過SSH登錄對應的AI-Host。對于C7x、MDC、DC環境,可以通過系統包管理器apt/yum等直接安裝openSSH-server;而海思Soc Linux/Android環境是精簡過的嵌入式環境,必須通過源碼編譯的方式進行安裝。此處以CS形態為例。
2?????? Linux環境openSSH服務搭建
2.1?????? 交叉編譯
2.1.1?????? 版本選擇及源碼準備
OpenSSH-:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz
OpenSSH依賴2個開源庫:zlib與OpenSSL
zlib 1.2.11:? https://zlib.net/zlib1211.zip
OpenSSL 1.1.1g: ?https://www.openssl.org/source/openssl-1.1.1g.tar.gz
同樣下載源碼壓縮包至本地。
2.1.2?????? 交叉編譯環境準備
獲取發布包中的對應交叉編譯器,CS形態使用的交叉編譯器為aarch64-himix210-linux。交叉編譯環境這里以x86_64的Ubuntu18.04為例。
1
tar xvf aarch64-himix210-linux.tgz
進入解壓后的目錄,并使用root用戶權限執行安裝腳本(可以參考readme指定其他安裝路徑):
1
cd aarch64-himix210-linux
2
sudo ./aarch64-himix210-linux.install
此時交叉編譯器已被安裝至/opt/hisi-linux/x86-arm路徑下,所需的環境變量也已自動更新到/etc/profile中。執行以下命令應該能正常顯示gcc版本:
1
source /etc/profile && aarch64-himix210-linux-gcc -v
2.1.3?????? 交叉編譯
解壓zlib的源碼壓縮包,并進入解壓后的目錄。
1
tar xf zlib-1.2.11.tar.gz
2
cd zlib-1.2.11/
配置交叉編譯器及安裝路徑:
1
CC=aarch64-himix210-linux-gcc ./configure --prefix=$HOME/install/zlib
編譯及安裝:
1
make -j
2
make install
解壓openssl的源碼壓縮包,并進入解壓后的目錄。
1
tar xf openssl-1.1.1g.tar.gz
2
cd openssl-1.1.1g
配置編譯選項、交叉編譯器及安裝路徑:
1
./config no-asm shared --cross-compile-prefix=aarch64-himix210-linux- --prefix=$HOME/install/openssl
將生成的Makefile中的所有"-m64"修改為"-mabi=lp64":
編譯及安裝:
1
make -j # 注:make -j并行編譯可能會失敗,若失敗可直接make
2
make install
解壓openssh的源碼壓縮包,并進入:
1
tar xf openssh-8.0p1.tar.gz
2
cd openssh-8.0p1
配置:
1
./configure --host=aarch64-linux --with-libs --with-zlib=$HOME/install/zlib --with-ssl-dir=$HOME/install/openssl CC=aarch64-himix210-linux-gcc AR=aarch64-himix210-linux-ar --prefix=$HOME/install/openssh --exec-prefix=$HOME/install/openssh --disable-etc-default-login --disable-strip
編譯及安裝:
1
make -j
2
make install
解壓openssh的源碼壓縮包,并進入:
1
tar xf openssh-8.0p1.tar.gz
2
cd openssh-8.0p1
配置:
1
./configure --host=aarch64-linux --with-libs --with-zlib=$HOME/install/zlib --with-ssl-dir=$HOME/install/openssl CC=aarch64-himix210-linux-gcc AR=aarch64-himix210-linux-ar --prefix=$HOME/install/openssh --exec-prefix=$HOME/install/openssh --disable-etc-default-login --disable-strip
編譯及安裝:
1
make -j
2
make install
install時若提示無權限創建/var/empty(privilege separation directory),則可以使用sudo創建后再使用chown改變owner。
再次執行make install,此時若提示ssh-keygen執行失敗,這是由于arm架構的可執行文件不識別,可暫時忽略,因為所需的文件(sshd, sftp-server, ssh-keygen等)都已安裝至目標路徑。
2.2?????? 部署
參考MindStudio文檔中的海思Soc環境準備一節。在剛才的交叉編譯服務器上安裝NFS服務,將剛才的安裝路徑($HOME/install)開放出去。
使用root賬號,通過telnet登錄海思Soc環境,在海思Soc的板端掛載該遠程路徑。
切換至掛載目錄,部署zlib和openssl相關產物:
1
cp zlib/lib/libz.so.1 /usr/lib
2
cp openssl/lib/libcrypto.so.1.1 /usr/lib
切換至OpenSSH安裝路徑,OpenSSH相關產物如下:
部署所需的可執行文件:
1
2
3
使用ssh-keygen生成秘鑰對:
1
2
參考該鏈接創建sshd組。
在/etc/passwd中加上:
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
在/etc/group中加上:
sshd:x:74:
創建privilege separation directory:
1
拷貝config至/etc并修改:
1
修改點1:將拷貝后的文件中的
#PermitRootLogin prohibit-password
改為
PermitRootLogin yes
使得可以使用root賬號的賬號密碼登錄。
修改點2:在subsystem條目配置正確的sftp-server路徑:
Subsystem?????? sftp??? /usr/lib/sftp-server
修改完成后啟動sshd,需指定config和key的路徑:
1
2.3? 驗證
在其他主機上使用ssh遠程登錄海思Soc板端執行命令或使用sftp訪問文件:
3?????? Android環境OpenSSH服務搭建(V900版本/96CV300版本)
3.1???? 下載V900/96CV300源碼
3.2???? 修改device.mk文件
v900文件路徑:device/huanglong/shaolingun/device.mk
96CV300文件路徑:device/huanglong/wudangstick/device.mk
在device.mk中增加如下編譯選項:
# Openssh
PRODUCT_PACKAGES += \
scp \
sftp \
ssh \
sshd \
sshd_config \
ssh-keygen \
start-ssh
3.3???? 修改externel/openssh下的Android.mk文件
在sshd模塊的編譯選項中,添加:
LOCAL_CFLAGS += -DSSHDIR=\"/data/run/ssh\"
3.4???? 編譯andorid源碼,重新燒寫鏡像,
v900編譯指令
a) source build/envsetup.sh
b) lunch shaolingun_SEC-eng
c) ./device/huanglong/build/build.sh
2. 96cv300編譯指令
a) source build/envsetup.sh
b) lunch wudangstick_SEC-eng
c) ./device/huanglong/build/build.sh
3.5???? 創建目錄結構,以下操作都在板端進行
mkdir -p /data/ssh/empty
chmod 700 /data/ssh
chmod 700 /data/ssh/empty
其中,?/data/ssh用來存放密鑰文件和sshd配置文件
3.6?? 生成配置文件
cat /system/etc/ssh/sshd_config | \
sed 's/#PermitRootLogin yes$/PermitRootLogin without-password/' | \
sed 's/#RSAAuthentication yes/RSAAuthentication yes/' | \
sed 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' | \
sed 's/PasswordAuthentication no/#PasswordAuthentication no/' | \
sed 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/' | \
sed 's/#ChallengeResponseAuthentication yes/ChallengeResponseAuthentication yes/' | \
sed 's/#UsePrivilegeSeparation yes/UsePrivilegeSeparation no/' | \
sed 's;/usr/libexec/sftp-server;internal-sftp;' > \
/data/ssh/sshd_config
chmod 600 /data/ssh/sshd_config
這里需要說明的是我們需要配置為root使用, 同時又不需要密碼.另外, 需要注意配置文件中指定了AuthorizedKeysFile為/data/ssh/authorized_keys
3.7????? 生成秘鑰
在Windows/Linux上通過下面的命令來生成密鑰
ssh-keygen -t rsa -C "your_email_address"
上面的命令會在主目錄下生成.ssh目錄, 目錄包含id_rsa(私鑰)和id_rsa.pub(公鑰)兩個文件
然后通過adb等命令將id_rsa.pub上傳至Android中(!!!文件要對應于AuthorizedKeysFile!!!)
adb push id_rsa.pub /data/ssh/authorized_keys
chmod 600 /data/ssh/authorized_keys
chown root:root /data/ssh/authorized_keys
cd?? /data/ssh/
ssh-keygen? -t?rsa? -f? ssh_host_rsa_key
ssh-keygen? -t?dsa? -f? ssh_host_dsa_key
這里passphrase默認為空
3.8?????? 啟動
mkdir -p /data/local/userinit.d
cat /system/bin/start-ssh | \
sed 's;/system/etc/ssh/sshd_config;/data/ssh/sshd_config;' > \
/data/local/userinit.d/99sshd
chmod 755 /data/local/userinit.d/99sshd
通過上面的命令單獨生成一個啟動腳本,后就可以通過執行下面的腳本來啟動sshd
/data/local/userinit.d/99sshd
實際操作過程中如果出現問題也可以通過下面的命令以調試的方式來啟動sshd
/system/bin/sshd -f /data/ssh/sshd_config -D -ddd
執行的時候第一次會報/data/run/ssh/empty不存在的問題,創建該文件夾并修改權限即可。
mkdir -p /data/run/ssh/empty
chmod 600 /data/run/ssh/empty
chown root:root /data/run/ssh/empty
備注:/system/bin/sshd -f /data/ssh/sshd_config -D -ddd 這個是調試命令,client端連接上后就斷開。如果想服務持續運行,把后面的 -D -ddd刪除,或者直接運行啟動腳本
Android Linux
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。