SSH系列1: OpenSSH移植

SSH使用公鑰密碼學進行端到端通信的加密,並且相當容易使用和部署。我現在移植的是openssh,參考的文章主要是:http://blog.chinaunix.net/u1/43047/showart_371372.html。這篇文章描述非常詳細,只是在編譯成功之後,我認爲好多部分是沒有必要的。所以結合上面文章和《構建嵌入式Linux系統》來總結一下。
 
(1)下載
 

openssh-4.6p1.tar.gz     http://www.openssh.com/portable.html
openssl-0.9.8e.tar.gz    http:
//www.openssl.org/source
zlib-1.2.3.tar.gz        http:
//www.zlib.net/

 
(2)編譯
 
    讚一句,該作者的處理方式非常好,和《構建嵌入式Linux系統》上一樣優秀。主要思想就是壓縮包在單獨目錄內,源碼包和編譯在一個目錄內,安裝目標在一個目錄內。這樣就省卻了很多麻煩。
 
    ·編譯zlib
 

[root@lqm zlib-1.2.3]# ./configure --prefix=/home/armlinux/fs/utilities/ssh/install/zlib-1.2.3

 

--- Makefile.orig 2008-03-24 14:44:48.000000000 +0800
+++ Makefile 2008-03-24 14:45:33.000000000 +0800
@@ -16,7 +16,8 @@
 # To install in $HOME instead of /usr/local, use:
 # make install prefix=$HOME

-CC=gcc
+CROSS=/usr/local/arm/3.4.1/bin/arm-linux-
+CC=$(CROSS)gcc

 CFLAGS=-O3 -DUSE_MMAP
 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
@@ -25,15 +26,15 @@
 # -Wstrict-prototypes -Wmissing-prototypes

 LDFLAGS=-L. libz.a
-LDSHARED=gcc
-CPP=gcc -E
+LDSHARED=$(CROSS)gcc
+CPP=$(CROSS)gcc -E

 LIBS=libz.a
 SHAREDLIB=libz.so
 SHAREDLIBV=libz.so.1.2.3
 SHAREDLIBM=libz.so.1

-AR=ar rc
+AR=$(CROSS)ar rc
 RANLIB=ranlib
 TAR=tar
 SHELL=/bin/sh

 
    然後make; make install
 
    ·編譯openssl
 

[root@lqm openssl-0.9.8e]# ./Configure --prefix=/home/armlinux/fs/utilities/ssh/install/openssl-0.9.8e os/compiler:/usr/local/arm/3.4.1/bin/arm-linux-gcc

 
    然後make; make install
 
    ·編譯openssh
 

[root@lqm openssh-4.6p1]# ./configure --host=arm-linux --with-libs --with-zlib=/home/armlinux/fs/utilities/ssh/install/zlib-1.2.3 --with-ssl-dir=/home/armlinux/fs/utilities/ssh/install/openssl-0.9.8e --disable-etc-default-login CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc AR=/usr/local/arm/3.4.1/bin/arm-linux-ar

 
    配置完成,然後make,主要不要安裝。
 
    ·首先把sshd複製到目標板的根文件系統的/usr/sbin,提前進行strip處理(約1.4M,比較大)。
 
    其次,需要建立文件夾/usr/local/etc/。然後把openssh目錄下的sshd_config拷貝到該文件夾下面。否則出現錯誤:
 

/usr/local/etc/sshd_config: No such file or directory

 
    ·再次,在主機上產生密鑰。按照《構建嵌入式Linux系統》的做法,會出現問題:
 

Could not load host key: /usr/local/etc/ssh_host_rsa_key
Could not load host key: /usr/local/etc/ssh_host_dsa_key

 
    所以,修改的方案爲:
 

[root@lqm nfs]# ssh-keygen -t rsa1 -f ssh_host_key -N ""
[root@lqm nfs]# ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
[root@lqm nfs]# ssh-keygen -t dsa -f ssh_host_dsa_key -N ""

 
    放到/usr/local/etc中。
 
    ·建立目錄/var/run /var/empty/sshd,並設定權限chmod 755 /var/empty
 
    ·增加sshd用戶。
 
    這個我是從host上拷貝,然後保留必要的用戶,得到的。這樣不會出問題。
 
    ·啓動時,應該使用絕對路徑。
 
    這樣就可以正常啓動了。只不過我在測試的時候,發現連接速度沒有在host快。相對來說,這個sshd佔用空間也大了很多,應該可以尋求替代方案。
發佈了2 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章