交叉編譯openssh(JZ2440+linux kernel2.6.22.6)

常用遠程登錄嵌入式linux系統板開發方式介紹

相信很多跑嵌入式linux的小夥伴都會經歷搞塊板子然後移植一個低版本的linux kernel然後進行各種交叉編譯開發的經歷。然而使用串口去做終端交互實在是效率太低,於是使用telnet和ssh都是比較好的選擇。telnet只要是移植了busybox基本上都會有的。ssh則需要自己去交叉編譯移植一下。
telnet簡單粗暴又好用,自己開發用其實就夠了,但是如果想要玩的開心深入一點,怎麼能不去交叉編譯ssh折騰一番呢?下面就介紹下這兩種方法。

Telnet

基本上能來看這帖子的都已經實現了busybox的移植,會有telnet工具。那麼只要在板子上把服務開一下就好。

telnetd -l /bin/sh  

如果沒添加過用戶密碼的需要添加一下密碼,直接用root用戶就好了,自己的板子也不用考慮使用其他用戶溯源這些事情了。

# passwd root

有的小夥伴會遇到如下錯誤:
passwd: unknown uid 0
網上有人說是因爲lib下沒有那幾個動態庫的,但是我看了我的板子上面是有的,最後發現應該是板子/etc/passwd裏的信息不對
可以通過下面的方式更改如下:

# echo root:x:0:0:root:/root:/bin/sh > /etc/passwd
# chmod 755 /etc/passwd
# passwd  root

下面一直完openssl也會有設置密碼的時候,如果有上面的問題也可以這麼解決。

交叉編譯openssh

我的工具鏈是
arm-linux-gcc-3.4.5-glibc-2.3.6
解壓到自己的目錄下,然後
vim setenv.sh 把路徑設置下,如下:

文件內容:export PATH=$PATH:/work/ssh/tools/gcc-3.4.5/gcc-3.4.5-glibc-2.3.6/bin
然後
chmod 777 setenv.sh
source setenv.sh 

下面流程主要是參考下面鏈接裏的這位兩位的方法,從下載、配置、編譯、拷貝、軟連接、運行等各個步驟詳細介紹,還是比較便捷的。
http://blog.sina.com.cn/s/blog_86d540e401019yie.html
http://bbs.100ask.org/forum.php?mod=viewthread&tid=17941&highlight=ssh
具體方法如下:
1》下載需要的源碼
從官網下或者國外鏡像下很慢,可以網上搜搜,或者從github上下吧:
github-tools.
下載zlib:zlib-1.2.3.tar.gz http://www.zlib.net
下載ssl: openssl-0.9.8e.tar.gz http://www.openssl.org/source/
下載ssh: openssh-4.6p1.tar.gz http://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/
2》編譯
/home/arm下新建目錄sshwork,並且將源碼複製到該目錄下
mkdir /home/arm/sshwork
cp zlib-1.2.3.tar.gz openssl-0.9.8e.tar.gzopenssh-4.6p1.tar.gz /home/arm/sshwork
/home/arm/sshwork下新建目錄lib,用來保存生成的庫文件。
mkdir /home/arm/sshwork/lib
1、編譯zlib
tar zxvf zlib-1.2.3.tar.gz -C .
cd zlib-1.2.3/
./configure -prefix=/home/arm/sshwork/lib/zlib-1.2.3
修改Makefile:
CC=gcc 改爲:
CC=arm-linux-gcc
LDSHARED= gcc 改爲:LDSHARED=arm-linux-gcc
CPP= gcc - E 改爲:CPP=arm-linux-gcc - E
AR= ar rc 改爲:AR=arm-linux-ar rc
開始編譯: make
make install
2、編譯openssl
tar zxvf openssl-0.9.8e.tar.gz
./Configure --prefix=/home/arm/sshwork/lib/openssl-0.9.8dos/compiler:arm-linux-gcc
make
make install
3、編譯openssh
tar zxvf openssh-4.6p1.tar.gz
cd openssh-4.6p1/
./configure -host=arm-linux -with-libs-with-zlib=/home/arm/sshwork/lib/zlib-1.2.3
-with-ssl-dir=/home/arm/sshwork/lib/openssl-0.9.8e-disable-etc-default-login
CC=arm-linux-gcc AR=arm-linux-ar
make
##不要make install

3》安裝
確保目標板上有以下目錄,如果沒有,則新建(目錄層次很重要,不要改變)
/usr/sbin
/usr/local/bin
/usr/local/libexec
/usr/local/etc/
1、在 openssh-4.6p1 目錄下創建 usr bin 目錄,文件臨時拷貝到這裏,然後統一打包到開發板
cd openssh-4.6p1
mkdir -p bin
mkdir -p usr/sbin
mkdir -p usr/local/bin
mkdir -p usr/local/libexec
mkdir -p usr/local/etc
#sshd 工作目錄
mkdir -p var/run
mkdir -p var/empty/sshd
chmod sshd var/empty
2、將 openssh-4.6p1目錄下的 sshd 拷貝到 目標板的 /usr/sbin 目錄下
cp sshd ./usr/sbin
3、將 copy scp sftp sshssh-add ssh-agent ssh-keygen ssh-keyscan 到目標板/usr/local/bin目錄下
cp scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan ./usr/local/bin
4、將 sshd_config ssh_config拷貝到 /usr/local/etc/ 目錄下
cp sshd_config ssh_config ./usr/local/etc
5、將 sftp-server ssh-keysign 到 /usr/local/libexec
cp sftp-server ssh-keysign ./usr/local/libexec
6、在主機上生成密鑰
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N “”
ssh-keygen -t rsa -f ssh_host_rsa_key -N “”
ssh-keygen -t dsa -f ssh_host_dsa_key -N “”
將生成的 ssh_host_key這3個文件copy到./usr/local/etc/目錄下
cp ssh_host
./usr/local/etc/
7、在開發板 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
8、打包
mkdir …/final
cp -r bin sbin usr …/final
cd …/final
tar czvf openssh.tgz ./
將openssh.tgz 拷貝到開發板根目錄解壓
9、啓動開發板,添加用戶
touch /etc/passwd
touch /etc/group
mkdir -p /home/sshd
adduser sshd
adduser root
passwd root 爲root用戶設置密碼

將開發板/usr/local/sshd_config,將PermitRootLogin yes前的註釋“#”號去掉

結束語

這種工具移植的過程還是很有意思的,每個人的環境不太一樣,遇到的問題也可能不太相同。通過在網上搜索估計能把多數人遇到的情況解決,如果想一探究竟的話,可以把源碼拿來分析一下,其實也不是很難。後面更新一篇類似方法的文章來拋磚引玉。

發佈了8 篇原創文章 · 獲贊 4 · 訪問量 1619
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章