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儲存退出執行
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自啟動程式說明