iTOP-4412開發板-實戰教程-ssh服務器移植到arm開發板

本文轉自迅爲開發板:http://www.topeetboard.comlinux

 

在前面實戰教程中,移植了「串口文件傳輸工具」,整個移植過程是比較簡單的,並且我git

們沒有作任何協議方面的瞭解,只是「配置」+「編譯」就完成了整個工做,如今你們應該對github

移植開源軟件有了基本的瞭解。vim

入門視頻教程中,給 Windows系統安裝了 ssh 客戶端,給 Ubuntu 安裝了 ssh 服務器,服務器

這樣就能夠經過 ssh Windows和虛擬機 Ubuntu 之間傳輸文件。其實在開發板上也是能夠網絡

移植和安裝 ssh 服務器,這樣就能夠經過網絡,在 Windows和開發板之間傳輸文件。ssh

「實戰教程-ssh 服務器移植到開發板」,咱們要完成的目標是可以經過 ssh 在開發板在工具

Windows和開發板之間傳輸文件,固然也是可使用 ssh 控制檯。測試

這個實驗比前面的「串口文件傳輸工具」教程在工程(實用性)上是更加有用的,假如在spa

實際的產品中,運行的是根文件系統,沒有界面,若是數據須要在開發板和 Windows傳輸數

據,對於普通用戶來講,是一個很好的選擇,操做起來比較簡單,只須要登錄而後直接將文件

拖來拖去便可。

這個實驗的難度要比「串口文件傳輸工具」要大一點,ssh 服務器須要依賴其餘的庫文

件,因此須要開發者先移植完成全部依賴的庫文件,最後才能移植 ssh 服務器。

 

 

1 ssh官網和下載地址

本小節的地址在做者沒有代理的狀況下,測試可用。

OpenssL 下載官網地址,以下所示。就是羅永浩捐過 100 萬的那個開源組織。

https://www.openssl.org/source/

OpenssL github 下載地址,以下所示。

https://github.com/openssl/openssl

ssh 開源組織官網地址,以下所示。

http://www.openssh.com/

HXng KXngo X 替代,以防文檔上傳以後被屏蔽)的 ssh 下載地址,測試能夠用,

以下所示。

https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/

zlib 官網地址,以下所示。

http://www.zlib.net/

 

2 詳細移植過程

源碼使用迅爲下載好的,編譯器使用arm-2009q3」。做者是在

/home/project/ssh-arm/」目錄下,解壓編譯配置這三個須要移植的文件,用戶若是在其

它目錄下,配置文件須要根據實際狀況修改,安裝目錄是/home/project/ssh-arm/」目錄

下的install」文件夾,以下圖所示。

 

 

 

 

 

 

 

以下圖所示,安裝目錄install」下新建兩個文件夾「openssl-0.9.8h」和「zlib-1.2.3」,後面編譯以後須要安裝到這個目錄下。

 

 

 

 

 

 

 

2.1 移植zlib

拷貝zlib-1.2.3.tar.gz」到 Ubuntu 系統,使用命令「tar -vxf zlib-1.2.3.tar.gz」解

壓,獲得zlib-1.2.3」文件夾,使用命令「cd zlib-1.2.3」進入「zlib-1.2.3」文件夾,以下

圖所示。

 

 

 

 

 

接着使用命令./configure --prefix=/home/project/ssh-arm/install/zlib-1.2.3」,設

置配置文件,以下圖所示。

 

 

 

 

 

使用命令vim Makefile」修改編譯參數,將全部 gcc 修改成「arm-none-linux-gnueabi-gcc」,以下圖所示。

 

 

 

 

 

 

接着使用編譯命令make」,以下圖所示。

 

 

 

 

 

接着使用安裝命令make install」,以下圖所示。

 

 

 

 

 

在後面編譯 SSH 的時候,須要用到 zlib 庫,做者這裏的路徑是「/home/project/ssh-arm/install」下後面配置的時候須要對應,生成的庫文件,以下圖所示。

 

 

 

 

 

 

這部分移植其實就是修改了編譯器,修改編譯器以後編譯出的文件和不修改編譯出來的文

件是不同的。在移植過程當中,可能由於沒有將寄存器配置爲目標系統的編譯器,那麼編譯出

來的必定運行不了。這裏能夠經過 linux strings 命令查看非文本文件中的可讀內容,一般

能夠和 grep 命令搭配使用。

以下圖所示,使用命令strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a」能夠查看到全部可讀信息,可讀信息比較多,能夠保存爲文本再查看,使用

命令strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a > log.my」重定位一

下輸出便可。

 

 

 

 

 

 

 

這裏須要用到的命令是strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a | grep GCC」」,以下圖所示。

 

 

 

 

 

 

 

如上圖所示,能夠看到編譯器版本是2009q3-67-4.4.1」的,說明這個庫是使用咱們設

置的編譯編譯的,編譯出的庫文件固然也是 arm 上使用的。

2.2 移植openssl

接着來移植 openssl 庫,拷貝「openssl-0.9.8h.tar.gz」到 Ubuntu 系統,使用命令

tar -vxf openssl-0.9.8h.tar.gz」解壓,獲得「openssl-0.9.8h」文件夾,使用命令「cd

openssl-0.9.8h」進入「openssl-0.9.8h」文件夾,以下圖所示。

 

 

 

 

 

 

 

接着使用命令./Configure linux-elf-arm -DB_ENDIAN linux:'arm-none-linux-gnueabi-gcc' --prefix=/home/project/ssh-arm/install/openssl-0.9.8h」配置編譯文件,

以下圖所示。

 

 

 

 

 

 

配置完成,以下圖所示。

 

 

 

 

 

 

 

使用編譯命令make」,以下圖所示。

 

 

 

 

 

 

編譯完成,以下圖所示。

 

 

 

 

 

 

最後使用安裝命令make intall」,以下圖所示。

 

 

 

 

 

編譯完成,以下圖所示。

 

 

 

 

 

以下圖所示,能夠看到生成了對應的庫文件,這是後面移植 ssh 須要的。

 

 

 

 

 

 

和前面 libz.a 小節相似,可使用命令查看一下編譯出來的文件到底有沒有配置正確。

 

2.3 移植ssh

接着來移植 openssh,拷貝「openssh-4.6p1.tar.gz」到 Ubuntu 系統,使用命令「tar

-vxf openssh-4.6p1.tar.gz」解壓,獲得「openssh-4.6p1」文件夾,使用命令「cd

openssh-4.6p1/」進入「openssh-4.6p1」文件夾,以下圖所示。

 

 

 

 

這裏看一下 ssh configure 的幫助文件,以下圖所示,使用「 ./configure --help」。

 

 

 

 

 

 

ssh configure 文件中須要配置的參數

 

--host 表示編譯出來要運行的平臺

--with-libs 表示須要的額外的庫文件;

--with-zlib 表示庫文件 zlib instal 路徑 l

--with-ssl-dir 表示 OpenSSl 文件的 install 路徑;

--disable-etc-default-login 表示不使用當前環境變量的編譯器,因此後面配置參數

時,最後直接配置 CC AR 這兩個編譯器;

CC 表示設置使用的編譯器;

AR 表示設置使用的編譯器的路徑(蠻奇怪,配置文件中彷佛沒有這個參數,用戶能夠執

行驗證下)。

接着使用配置命令,命令比較長,做者使用顏色給你們分段:

./configure --host=arm-none-linux --with-libs --with-zlib=/home/project/ssh-arm/install/zlib-1.2.3 --with-ssl-dir=/home/project/ssh-arm/install/openssl-0.9.8h--disable-etc-default-login CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc AR=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ar

配置編譯文件,以下圖所示。

 

 

 

 

 

 

配置完成,以下圖所示。

 

 

 

 

 

 

使用編譯命令make」,以下圖所示。

 

 

 

 

 

 

 

編譯完成,以下圖所示。

 

 

 

 

 

 

編譯完成,最後確定是須要安裝到開發板上的,以下圖所示。最後在目錄下

/home/project/ssh-arm/openssh-4.6p1」有這幾個二進制文件「scp sftp ssh

sshdssh-addssh-agentssh-keygenssh-keyscan」須要安裝到開發板上。最終編譯

出來的二進制文件,可使用 file 命令查看文件屬性,以下圖所示,使用命令「file scp」,

能夠看到scp」文件是 32 ARM 上使用的可執行文件。

 

 

 

 

 

 

3 安裝測試

3.1 基本文件的安裝

在開發板上新建/usr/libexec「、「/usr/local/etc 」、「/usr/local/bin 」三個目

錄,使用命令mkdir -p /usr/libexec /usr/local/etc /usr/local/bin」,以下圖所示。

 

 

 

 

 

 

 

在虛擬機 Ubuntu 上,將 openssh-6.6p1 下的生成「scp sftpsshsshdssh-addssh-agentssh-keygenssh-keyscan」可執行文件拷貝到開發板的

/usr/local/bin」目錄下,拷貝完成,以下圖所示。

 

 

 

 

 

 

 

modulissh_configsshd_config」拷貝到開發板的「/usr/local/etc」目錄下,

拷貝完成,以下圖所示。

 

 

 

 

 

 

 

sftp-serverssh-keysign」拷貝到開發板的「/usr/libexec」目錄下,拷貝完成,

以下圖所示。

 

 

 

 

 

 

 

 

3.2 生成key文件,並安裝

使用ssh-keygen」生成是個 key 文件「ssh_host_rsa_key」「ssh_host_dsa_key

ssh_host_ecdsa_key」和「ssh_host_ed25519_key」。

在虛擬機 Ubuntu 控制檯,「/home/project/ssh-arm/openssh-4.6p1」目錄下,使用

命令ssh-keygen -t rsa -f ssh_host_rsa_key -N ""」,能夠生成「ssh_host_rsa_key 」文

件,以下圖所示。

 

 

 

 

 

 

 

接着使用剩下的三條命令:

ssh-keygen -t dsa -f ssh_host_dsa_key -N ""

ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""

ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""

 

 

執行完成以後,生成的文件以下圖所示。

 

 

 

 

 

將生成的ssh_host_rsa_key」「ssh_host_dsa_key」「ssh_host_ecdsa_key」和

ssh_host_ed25519_key」文件,拷貝到開發板的「/usr/local/etc/」目錄,而後將其權限

修改成 600,以下圖所示。

 

 

 

 

3.3 修改目標板祕鑰文件

在開發板串口控制檯中,使用命令vi /etc/passwd」,打開 ssh 祕鑰文件,在

/etc/passwd」文件底行添加如下內容:

sshd:x:74:74:Privilege-separated

SSH:/var/empty/sshd:/sbin/nologin

添加完成以後,以下圖所示,而後保存,祕鑰文件修改完成。

 

 

 

 

 

 

3.4 測試

做者的開發板連接路由器,PC 機的 Windows系統也是連接路由器,因此首先要確保開

發板和 PC 機是能夠 Ping 通的,以下圖所示。

做者的 PC IP 爲:192.168.2.12,以下圖所示。

 

 

 

 

 

 

 

開發板的 IP 爲:192.168.2.230,以下圖所示。

 

 

 

 

 

 

 

使用 ping命令測試,以下圖所示,網絡通暢,另外按鍵「Ctrl+c 能夠結束 ping

做。

 

 

 

 

 

 

 

接着在開發板上新建 root 帳戶,以下圖所示,使用命令「passwd root」,它會提示輸

入密碼,須要重複輸入兩次以防輸錯。

 

 

 

 

 

 

而後在開發板上運行 sshd 二進制文件,使用命令「/usr/local/bin/sshd」,以下圖所

示,雖然報錯了,可是不影響使用。若是提示缺乏動態庫,前面的庫文件若是拷貝不全,可能

出現這種問題,若是用戶使用迅爲電子的根文件系統,通過測試各類文件都拷貝沒有錯誤,一

般是不會提示缺乏什麼庫的。

 

 

 

 

 

 

接着使用ps」命令,查看一下 sshd 是否在運行,以下圖所示,能夠看到 sshd 已經運

行了。

 

 

 

 

而後使用工具 ssh 測試是否和 PC 聯通可否正常通訊,以下圖所示,使用命令

/usr/local/bin/ssh 192.168.2.12」,這裏的 IP 是做者 PC IP

 

 

 

 

接着在 PC 上使用 ssh 工具鏈接開發板,使用方法和鏈接 Ubuntu 上的 ssh 相似,以下圖

所示。

 

 

 

 

 

 

而後傳一個文件測試下,以下圖所示。

 

 

 

 

 

 

而後經過 ssh 直接拖到到 pc 上,以下圖所示,內容不變,說明成功完成了文件傳輸移植

工做。

 

 

 

 

ssh 控制檯也是可使用的,以下圖所示,登錄方法和 PC 鏈接虛擬機 Ubuntu ssh

樣。

 

 

 

 

 

另外在安裝部分,也能夠將其拷貝到文件系統的源碼中對應目錄,從新打包編譯,生成直

接支持 ssh 的鏡像。

到這裏,部分用戶可能會有疑惑,第一我的是如何知道 ssh 須要這兩個庫文件的呢?首

先,開發 ssh 軟件的大神,作了這個東西會提供編譯和使用 demo,這樣就有了基礎的英文移

植文檔,而後慢慢的會有中文版的,接着 ssh 流傳開了以後,經過網絡搜索 ssh 移植到 arm

的方法的文檔和博客,就隨處可見了。

固然,假如未來你們工做有移植的需求,找不到中文教程,須要直接使用某個開源軟件的

demo,首先就須要英文過關,而後還須要有移植的基礎知識。在編譯的過程當中,它會提示缺

少各類庫,經過編譯,也是能夠一步一步找出依賴庫的。

相關文章
相關標籤/搜索