天天看點

成功移植 SSH 服務到 ARM 開發闆上

SSH協定族可以用來進行遠端控制, 附加的SFTP協定可輕松實作在計算機之間傳送檔案。而實作此功能的傳統方式,如telnet(終端仿真協定)、 rcp ftp、 rlogin、rsh都是極為不安全的,因為它們使用明文傳送密碼。 OpenSSH常常被誤認以為與OpenSSL有關聯,但實際上這兩個計劃的有不同的目的,不同的發展團隊,名稱相近隻是因為兩者有同樣的軟體發展目标── 提供開放源代碼的加密通訊軟體。

1 、下載下傳

首先下載下傳幾個源碼包

1、移植openssh需要三個包:openssh、openssl 和 zlib,位址如下:

  • zlib官方下載下傳:http://www.zlib.net/
  • openssl官方下載下傳:http://www.openssl.org/source
  • openssh官網下載下傳:http://www.openssh.com/portable.html

因為它們之間沒有版本所謂的版本沖突,是以都下載下傳最新闆的即可。本文以zlib-1.2.3.tar.gz、openssl-0.9.8e.tar.gz、openssh-5.6p1.tar.gz這三個版本為例,其他版本過程一樣。

2 、部署

1、建立工作目錄:

mkdir /work

cd /work

2、在/work目下面建立ssh目錄

mkdir /work/ssh 

cd /work/ssh

mkdir compressed install source 

//Install 軟體安裝目錄

//source 源碼包解壓目錄

mv tarpakgs/openssh-5.6p1.tar.gz /work/ssh/compressed

mv tarpakgs/openssl-0.9.8e.tar.gz /work/ssh/compressed

mv tarpakgs/zlib-1.2.3.tar.gz /work/ssh/compressed

3、解壓安裝包:

cd /work/ssh/compressed/

tar zxvf zlib-1.2.3.tar.gz –C ../source

tar zxvf openssl-0.9.8e.tar.gz –C ../source

tar zxvf openssh-5.6p1.tar.gz –C ../source

3 、交叉編譯 zlib

1、編譯zlib

修改Makefile :

CC=gcc 改為:

CROSS=/usr/local/arm/3.4.1/bin/arm-linux-

CC=$( CROSS ) gcc

LDSHARED= gcc 改為:LDSHARED=$( CROSS ) gcc

CPP= gcc - E 改為:CPP=$( CROSS ) gcc - E

AR= ar rc 改為:AR=$( CROSS ) ar rc

開始編譯:

make

make install

2、編譯openssl 

./configure --prefix=/home/zuopeng/work/ssh/install/openssl os/compiler:arm-linux-gcc

make

make install

3、編譯openssh

./configure --host=arm-linux --with-libs --with-zlib=/home/zuopeng/work/ssh/install/zlib --with-ssl-dir=/home/zuopeng/work/ssh/install/openssl --disable-etc-default-login CC=arm-linux-gcc AR=arm-linux-ar

make(記住不需要make install,具體原因未知)

4、ARM開發闆準備

確定目标闆上有以下目錄,若沒有,則建立:

/usr/local/bin
/usr/local/etc
/usr/libexec
/var/run
/var/empty/sshd           

将  openssh目錄下檔案拷貝到開發闆系統中,具體為:

  • scp、sftp、ssh 、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan共7個檔案拷貝到開發闆/usr/local/bin
  • moduli、ssh_config、sshd_config共3個檔案拷貝到開發闆 /usr/local/etc
  • sftp-server、ssh-keysign 共2個檔案拷貝到開發闆 /usr/libexec
  • sshd 拷貝到/usr/sbin

在主機上:

ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
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_ed25519_key 權限為 600:

$ chmod 600 ssh_host_ed25519_key      

其中 ssh_host_ed25519_key 是SSH第二版協定用到的key,需要修改權限,否則會提示以下錯誤:

Permissions 0644 for '/usr/local/etc/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /usr/local/etc/ssh_host_ed25519_key
Could not load host key: /usr/local/etc/ssh_host_ed25519_key      

将生成的 ssh_host_* 4個檔案copy到目标闆的 /usr/local/etc/目錄下

(5) 添加使用者(這一步不要做)

将主機上/etc/ 目下的 passwd, shadow, group 三個檔案copy到目标闆的 /etc 目錄下, 同時記得将passwd的最後 /bin/bash 該為 /bin/sh

//這一步以後,開發闆上的使用者結構與你本機的結構就是一樣的了,是以在cp之前先把你自己的root密碼設好

//#passwd設定root密碼,然後在把上面3個檔案cp到開發闆/etc下 

其實可以删除不需要的一些使用者。

5、注意事項(開發闆上操作)

1、/打開開發闆/usr/local/sshd_config,将PermitRootLogin yes前的注釋“#”号去掉。

2、 打開 /etc/passwd 檔案,在最後添加下面這一行:

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin           

如果開發闆的 root 使用者還沒有密碼,鍵入以下指令然輸入兩次密碼來修改,否其他裝置無法連:

$ passwd root           

密碼更改失敗,查詢/etc/目錄下是否有shadow檔案夾,沒有請建立

ssh [email protected] 即可登入 重新開機開發闆之後,發現ssh 失敗了,原因是因為sshd 服務沒有啟動,需要在/etc/init.d/rcS 中添加一行,設定為開機啟動

/usr/sbin/sshd