1. 程式人生 > >openssh編譯安裝到ARM嵌入式系統中

openssh編譯安裝到ARM嵌入式系統中

注:如果想自行編譯移植,即可從第一步開始;若已有sshd 、sftp-server、金鑰等檔案則直接進行第二個步驟;相關原始碼及編譯後的檔案在附件中可見。

一.SSHD編譯(此步驟在虛擬機器上執行)

    原始碼包:zlib-1.2.3.tar.bz2

                         openssl-0.9.81.tar.gz

                         openssh-4.6p1.tar.gz

        說明:本次只移植SSH的服務端,客戶端相關程式和配置檔案不拷貝到開發板。

 1.1 在/root/目錄下建立ssh目錄

#mkdir /root/ssh

#cd /root/ssh

# mkdir compressed install source           注:compressed 用於存放原始碼包                                                                              install       軟體安裝目錄                                                                              source       原始碼包解壓目錄

將三個原始碼包拷貝到compressed目錄下。

1.2 交叉編譯zlib

# tar -jxvf zlib-1.2.3.tar.bz2  -C  ../source # cd ../source/zlib-1.2.3 # ./configure --prefix=/root/ssh/install/zlib-1.2.3 # vi Makefile       //修改Makefile中的某些變數值,指定自己的交叉編譯工具

CC=arm-linux-gnueabihf-gcc CPP=arm-linux-gnueabihf-gcc -E AR=arm-linux-gnueabihf-ar rc LDSHARED=arm-linux-gnueabihf-gcc儲存退出執行

make               make install

1.3交叉編譯openssl

# cd /root/ssh/compressed/ # tar -zxvf openssl-0.9.81.tar.gz  -C  ../source # cd ../source/openssl-0.9.81 #./Configure  --prefix=/root/ssh/install/openssl-0.9.81  os/compiler:arm-linux-gnueabihf-gcc執行 make        (如果遇到錯誤輸入rm -f /usr/bin/pod2man      make install   (如果遇到錯誤輸入rm -f /usr/bin/pod2man

1.4交叉編譯openssh

# cd /root/ssh/compressed# tar -zxvf openssh-4.6p1.tar.gz  -C ../source # cd ../source/openssh-4.6p1 #./configure --host=arm-linux-gnueabihf --with-libs                                 --with-zlib=/root/ssh/install/zlib-1.2.3/ --with-ssl-dir=/root/ssh/install/openssl-0.9.81 --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar

#make                       注:不要make install

這時在/root/ssh/source/ openssh-4.6p1/目錄下生成了sshd sftp-server、金鑰等檔案。

可以用strip工具把sshd體積變小,以節省空間,操作如下:

#arm-linux-gnueabihf-strip -s sshd

還需要建立金鑰(用ssh-keygen工具):

#ssh-keygen -t rsa1 -f ssh_host_key -N ""
#ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
#ssh-keygen -t dsa -f ssh_host_dsa_key -N ""

會生成這六個金鑰檔案:ssh_host_dsa_key  

ssh_host_dsa_key.pub  

ssh_host_key 

ssh_host_key.pub  

ssh_host_rsa_key  

ssh_host_rsa_key.pub

二.移植(此步驟在開發板上執行)

 2.1 在開發板上建立需要的目錄

                  #mkdir -p /usr/local/etc

                  #mkdir -p /var/run /var/empty/sshd  並設定許可權chmod 755 /var/empty

把在虛擬機器下 /root/ssh/source/openssh-4.6p1生成的服務端相關檔案拷貝到開發板相應目錄下:

                  sshd和 sftp-server複製到開發板的/sbin/目錄下

                  生成的六個金鑰檔案和sshd_config複製到/usr/local/etc/目錄下

進入/usr/local/etc/目錄下,修改許可權:

# chmod 0644 *

# chmod 0600 ssh_host_dsa_key  ssh_host_key  ssh_host_rsa_key

2.2 下面是在開發板上操作

                  修改/etc/目錄下的passwd和group檔案,新增sshd使用者和組

                  #vi /etc/passwd

                  在最後一行新增sshd:*:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

         儲存退出。

                  #vi /etc/group

                  在最後一行新增sshd:*:74:

         儲存退出。

 2.3修改sshd_config 

         分別去掉下列語句前的註釋號(即去掉#號)並修改為: 

PermitRootLogin    yes―――――允許根使用者登陸

PermitEmptyPasswords yes――――允許使用空密碼

UsePrivilegeSeparation   no――――把安全級別降低,因為不會連線網際網路

同時修改sftp-server的存放路徑為 /sbin/sftp-server

         執行sshd時要用絕對路徑

                  #/sbin/sshd

         這樣可以在windows下用ssh客戶端進行連線了。

三、加入自啟動指令碼

/etc/init.d目錄下新建sshd檔案

#! /bin/sh 

sshd=/sbin/sshd
test -x "$sshd" || exit 0


case "$1" in
  start)
    echo -n "Starting sshd daemon"
    start-stop-daemon --start --quiet --exec $sshd  -b
    echo "."
    ;;
  stop)
    echo -n "Stopping sshd"
    start-stop-daemon --stop --quiet --exec $sshd
    echo "."
    ;;
  restart)
    echo -n "Stopping sshd"
    start-stop-daemon --stop --quiet --exec $sshd 
    echo "."
    echo -n "Waiting for sshd to die off"
    for i in 1 2 3 ;
    do
        sleep 1
        echo -n "."
    done
    echo ""
    echo -n "Starting sshd daemon"
    start-stop-daemon --start --quiet --exec $sshd -b
    echo "."
    ;;
  *)
    echo "Usage: /etc/init.d/sshd {start|stop|restart}"
    exit 1
esac

exit 0

進入/etc/init.d目錄執行命令

 cd /etc/init.d 
 ln -sf ../init.d/sshd   ../rc5.d/S30sshd
 ln -sf ../init.d/sshd   ../rc3.d/S30sshd

即可實現開機自動啟動sshd服務。

參考:

linux系統的7種執行級別

/etc/rc.d/init.d自啟動程式說明