移植sshd到博创2410开发板

移植sshd到博创2410开发板

移植sshd到博创2410开发板

一、 环境

硬件环境:

HostX86PC       

Target:博创2410开发板

软件环境:

Hostredhat linux 9.0

Targetarm-linux                kernel:linux- 2.4.18

二、 移植步骤

源码包:

openssh-4.6p1.tar.gz   http://www.openssh.com/portable.html

openssl- 0.9.8 e.tar.gz      http://www.openssl.org/source

zlib- 1.2.3 .tar.tar             http://www.zlib.net/

编译工具:

Armv 4l -unkonwn-linux-gccArmv 4l -unkonwn-linux-g++系列。

21、交叉编译

       我在/arm(我在pc上作为nfs目录挂载到开发板上的)新建work/ssh目录

Mkdir /arm/work/ssh                   工作目录

Cd /arm/work/ssh

Mkdir compressed install source          compressed用于存放源码包

                                                        Install软件安装目录

                                                        Source源码包解压目录

       我的源码包是在windows下下载的,由于我在linux建立了samba服务器目录为(/home/sambauser),所以所有源码包都放在在目录下,把它们拷贝到/arm/work/ssh/compressed

Mv /home/sambauser/openssh-4.6p1.tar.gz        /arm/work/ssh/compressed

Mv /home/sambauser/openssl- 0.9.8 e.tar.gz /arm/work/ssh/compressed

Mv /home/sambauser/zlib- 1.2.3 .tar.gz   /arm/work/ssh/compressed

交叉编译zlib

cd /arm/work/ssh/compressed/

tar xzvf zlib- 1.2.3 .tar.gz  -C  ../source

cd ../source/zlib- 1.2.3

 ./configure --prefix=/arm/work/ssh/install/zlib- 1.2.3

 vim Makefile

CC= Armv 4l -unkonwn-linux-gcc

AR= Armv 4l -unkonwn-linux-ar rc

CPP = Armv 4l -unkonwn-linux-gcc -E

LDSHARED= Armv 4l -unkonwn-linux-gcc

 make

 make install

交叉编译openssl

cd /arm/work/ssh/compressed/

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

cd ../source/openssl- 0.9.8 e

./Configure --prefix=/arm/work/ssh/install/openssl-0.9.8e  os/compiler Armv 4l -unkonwn-linux-gcc

make

make install

交叉编译openssh

cd /arm/work/ssh/compressed

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

 cd ../source/ openssh-4.6p1

./configure --host= Armv 4l -unkonwn-linux --with-libs --with-zlib=/arm/work/ssh/install/zlib-1.2.3 --with-ssl-dir=/arm/work/ssh/install/openssl-0.9.8e --disable-etc-default-login CC= Armv 4l -unkonwn-linux-gcc AR= Armv 4l -unkonwn-linux-ar

Make

如果make的时候出现如下错误的话

strtonum.c: In function `strtonum':

strtonum.c:59: `LLONG_MIN' undeclared (first use in this function)

strtonum.c:59: (Each undeclared identifier is reported only once

strtonum.c:59: for each function it appears in.)

strtonum.c:61: `LLONG_MAX' undeclared (first use in this function)

我的处理方法是修改openssh-4.6p1目录下的config.h文件,添加如下两行:

#define LLONG_MIN    -9223372036854775808

#define LLONG_MAX   9223372036854775807

把生成的sshdArmv 4l -unkonwn-linux-strip处理一下,

Armv 4l -unkonwn-linux-strip sshd

22、安装sshd

在安装的时候我就遇到很多问题,不过在参考网上的资料还是搞定了。因为博创2410开发板上的根文件系统是cramfs的,/usr/etc目录下的文件无法修改也不能增加新的目录和文件,然而/mnt/yaffs/这个文件系统就可以添加新的文件和目录。我的工作分为两大块:重建根文件系统和yaffs文件系统(这个部分依个人情况而定,我是因为之前在把开发板上的东西做实验做的混乱了干脆重来的。)

221  重建根文件系统

在开发板用vivi分区时分给根文件系统的大小为 3M 左右,所以sshd运行时需要的一些文件就不能编进根文件系统了。我也借鉴博创自己的做法做个链接然后链接到yaffs目录下面相对应的目录和文件。我所有和根文件系统有关的东西放在/arm/root/目录下,所以下面的操作都是对这个目录下的文件操作。

/usr/目录下新建一个链接文件local链接到/mnt/yaffs/local/目录

Cd /arm/root/

Ln –s ./usr/loca/ ./mnt/yaffs/local/

还有要修改/etc目录下的passwdgroup文件,添加上sshd用户和组

Cd /arm/root/etc

Vi passwd

修改后如下所示:

root::0:0:root:/:/bin/sh

bin:*:1:1:bin:/bin:

daemon:*:2:2:daemon:/sbin:

nobody:*:99:99:Nobody:/:

sshd:*:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin―――添加sshd用户

vi group

root:*:0:

daemon:*:1:

bin:*:2:

sys:*:3:

adm:*:4:

tty:*:5:

disk:*:6:

lp:*:7:lp

mail:*:8:

news:*:9:

uucp:*:10:

proxy:*:13:

kmem:*:15:

dialout:*:20:

fax:*:21:

voice:*:22:

cdrom:*:24:

floppy:*:25:

tape:*:26:

sshd:*:74:-------------添加sshd

sudo:*:27:

audio:*:29:

ppp:x:99:

然后在/var目录下新建两个目录

Cd /arm/root/var

Mkdir empty

Mkdir run

Cd empty

Mkdir shhd

到此为止,根文件系统修改完毕,把/arm/root/制作成下载到开发板上的映像文件root.cramfs

Cd /arm

Mkcramfs root root.cramfs

做好映像文件root.cramfs后下载到开发板上,这个参考博创的实验手册就可以了我就不罗嗦。

222  制作yaffs文件系统

       因为之前在根文件系统中/usr/local/时链接到yaffs下的local目录的,所有要在yaffs下添加local目录。我的yaffs是在/arm目录下。

Cd /arm/yaffs

Mkdir local

Cd local

Mkdir bin etc libexec sbin share

       以上命令是把一些用来存放文件的目录建好,然后把相应的文件拷贝进去。

切换到ssh编译的目录。

Cd /arm/work/ssh/source/openssh-4.6p1

Cp scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan /arm/yaffs/local/bin

cp moduli  ssh_config  sshd_config  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  /arm/yaffs/local/etc

如果没有那些key文件的话,用如下命令产生:

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 ""

还有一个问题是要注意这些文件的属性,

-rw-------    1 root     root        88039 Feb 15  2003 moduli

-rw-r--r--    1 root     root         1167 Feb 15  2003 ssh_config

-rw-------    1 root     root          668 Nov 17 17:23 ssh_host_dsa_key

-rw-r--r--    1 root     root          590 Nov 17 17:23 ssh_host_dsa_key.pub

-rw-------    1 root     root          515 Nov 17 17:23 ssh_host_key

-rw-r--r--    1 root     root          319 Nov 17 17:23 ssh_host_key.pub

-rw-------    1 root     root          883 Nov 17 17:23 ssh_host_rsa_key

-rw-r--r--    1 root     root          210 Nov 17 17:23 ssh_host_rsa_key.pub

-rw-------    1 root     root         2474 Feb 15  2003 sshd_config

如果你的这些文件的属性设置和上面的不一样的话,需要改过来不然启动sshd服务的时候会报错。

cp sftp-server  ssh-keysign   /arm/yaffs/local/libexec

cp sshd   /arm/yaffs/local/sbin

这些弄好之后,把yaffs目录下所有的文件和目录压缩为一个压缩包

Cd /arm/yaffs

Tar cjvf * /arm/yaffs.tar.bz2

接下来就按照博创的手册把yaffs.tar.bz2下载到开发板然后解压。

此时的你只要等开发板启动好之后启动sshd服务了,使用绝对路径来启动。

/usr/local/sbin/sshd

用客户端测试,linuxwindows下都可以通过ssh访问开发板了。

三、 我所遇到的问题及其解决方法

[root@linuxserver ssh]# ssh -l root 192.168.1.166(这是我开发板的ip地址)

[email protected]'s password:

Permission denied, please try again.

分析:

       这是使用根用户来登陆开发板,因为博创开发板的根用户没有密码,所以要修改sshd_config文件如下选项:

PermitRootLogin    yes―――――允许根用户登陆

PermitEmptyPasswords yes――――允许使用空密码

UsePrivilegeSeparation   no――――把安全级别降低,因为不会连接互联网

我在移植过程中遇到的问题都参照网上的文章解决了,非常感谢众多网友们的贡献,真的非常感谢。写在我前面的移植步骤里面了。

参考资料:

移植sshdJK2410开发板 小结http://blog.chinaunix.net/u1/43047/showart_371372.html

SSH系列1 OpenSSH移植http://linux.chinaunix.net/bbs/viewthread.php?tid=988433

解决ssh不能连接的问题http://daning.javaeye.com/blog/166186

你可能感兴趣的:(linux,windows,function,redhat,ssh,each)