移植SSH到ARM開發板(保姆級教程)
此教程的前提在於網路能夠Ping通
已經有交叉編譯器,如arm-linux-gcc在終端上能直接執行
一. 這篇教程在講什麼?
在做一些linux驅動開發的時候,在開發板和主機之間互動、以及檔案傳輸十分的繁瑣。主要有TFTP、NFS方式。
但是個人覺得還是SSH更加方便,配上一些類似Putty、Mobaxterm的軟體既可以控制開發板終端,又可以傳輸檔案。
主要講的就是如何在Linux開發板上部署SSH伺服器。
二. 主要流程 (所有目錄最好與我同步)
1.下載原始碼
zlib
下載網址:
http://www。
zlib。net/fossils/
教程中版本選擇的是: zlib-1。2。11。tar。gz
openssl
下載網址:
https://www。
openssl。org/source/mirr
or。html
PS:有多個映象網址,選擇一個可以使用的
教程中版本選擇的是: openssl-1。1。1-stable-SNAP-20210701。tar。gz
openssh
(前兩者可以看做ssh的依賴)
下載網址:
https://
fastly。cdn。openbsd。org/
pub/OpenBSD/OpenSSH/portable/
教程中版本選擇的是: openssh-8。6p1。tar。gz
2.編譯原始碼
0) 將上述壓縮包均複製到Linux虛擬機器下(目錄隨意,例如我放在/home/ssh-code/),解壓 :
tar -zxvf xxx。tar。gz
分別解壓三個壓縮包
1) 編譯zlib原始碼
cd
/home/ssh-code/zlib-1。2。11
mkdir install_dir
#建立安裝目錄
。/configure ——prefix
=
/home/ssh-code/zlib-1。2。11/install_dir
#執行之後會生成Makefile
vim Makefile
#修改Makfile 將其中gcc、g++都修改為交叉編譯器的名稱。
## 原來程式碼
# 19: CC=gcc
# 。。。
# 30: LDSHARED=gcc -shared -Wl,-soname,libz。so。1,——version-script,zlib。map
# 31: CPP=gcc -E
## 修改如下
# 19: CC=arm-linux-gcc
# 。。。
# 30: LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz。so。1,——version-script,zlib。map
# 31: CPP=arm-linux-gcc -E
make
make install
2) 編譯openssl原始碼
cd
/home/ssh-code/openssl-1。1。1-stable-SNAP-20210701/
mkdir install_dir
。/Configure linux-generic32 no-asm shared no-async ——prefix
=
/home/ssh-code/openssl-1。1。1-stable-SNAP-20210701/install_dir
vim Makefile
# CROSS_COMPILE=arm-linux- #92行,修改成這樣
make
make install
3) 編譯openssh原始碼
cd
/home/ssh-code/openssh-8。6p1
。/configure ——host
=
arm-linux ——with-libs ——with-zlib
=
/home/ssh-code/zlib-1。2。11/install_dir ——with-ssl-dir
=
/home/ssh-code/openssl-1。1。1-stable-SNAP-20210701/install_dir ——disable-etc-default-login
# 注意修改路徑
make
#千萬不要 make install 不然會包含一些配置資訊
4)整理編譯完成的檔案,並打包
#
cd
/home/ssh-code/
mkdir arm-ssh
cd
arm-ssh
mkdir sbin bin etc libexec
cd
/home/ssh-code/openssh-8。6p1
# 分類生成的檔案
cp sshd 。。/arm-ssh/sbin
cp scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 。。/arm-ssh/bin
cp sshd_config ssh_config 。。/arm-ssh/etc
cp sftp-server ssh-keysign 。。/arm-ssh/libexec
# 生成一些秘鑰,前提是主機上已經有ssh服務
cd
。。/arm-ssh/etc
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N
“”
#此處ssh-keygen 並非此次編譯生成的
ssh-keygen -t rsa -f ssh_host_rsa_key -N
“”
ssh-keygen -t dsa -f ssh_host_dsa_key -N
“”
cd
。。/。。
tar -zcvf arm-ssh。tar。gz arm-ssh/
#先打包
#複製到開發板(方式自選)
3。移植到開發板
1)部署
# 例如已經複製在開發板 /home/ttt/ssh路徑下
cd
/home/ttt/ssh
tar -zxvf arm-ssh。tar。gz
#解壓指令
# 檢查開發板是否有以下目錄,若沒有則建立
## /usr/sbin
## /usr/local/bin
## /usr/local/etc
## /usr/local/libexec
# 部署到對應資料夾
cd
arm-ssh
cp sbin/* /usr/sbin
cp bin/* /usr/local/bin
cp etc/* /usr/local/etc
cp libexec/* /usr/local/libexec
# 建立軟連線
cd
/bin
ln -s /usr/local/bin/scp
ln -s /usr/local/bin/sftp
ln -s /usr/local/bin/ssh
ln -s /usr/local/bin/ssh-add
ln -s /usr/local/bin/ssh-agent
ln -s /usr/local/bin/ssh-keygen
ln -s /usr/local/bin/ssh-keyscan
# 修改配置檔案
vim /usr/local/sshd_config
# 將PermitRootLogin yes前的註釋“#”號去掉 就可以以root登入
2) 如果開發板使用者沒有密碼可以修改密碼
passwd root
3)測試 在主機上執行
ssh root@192。168。x。xxx
或者藉助其他工具,輸入密碼就大功告成啦~