Chinaunix首页 | 论坛 | 博客
  • 博客访问: 851563
  • 博文数量: 290
  • 博客积分: 511
  • 博客等级: 下士
  • 技术积分: 1590
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-29 13:14
文章分类

全部博文(290)

文章存档

2018年(28)

2017年(19)

2016年(8)

2015年(1)

2014年(14)

2013年(12)

2012年(22)

2011年(186)

分类: LINUX

2013-01-10 19:50:46

本文介绍:
    该文章主要是介绍如何在coldfire芯片mcf54452-5上面移植ssh。
移植过程:
     一、ssh是linux里面提供的一个远程安全登录的协议,我们知道telnet也是远程登录,但是没有安全性。所以就产生了ssh,关于ssh的详细介绍请查看百度相关信息。
     二、freescale官网上提供了基于mcf54455evb的bsp包,这里安装后产生ltib的文件夹,它是一个管理一整套源码工具,ltib全称叫linux target image build 具体什么意思,大家应该也能看出了,它里面可以配置uboot 、内核、文件系统、等其他一些软件包。
      三、 最初移植ssh当然首先看ltib里面有没有集成了ssh,通过配置命令 ./ltib -c 后进入配置界面
 
移动上下键找到package list 回车进入,移动上下键竟然发现有openssh,当时很开心,openssh就是ssh源码,它还依赖openssl、zlib,所以在编译时,首先先编译这两个。选中后开始了编译,
到最后提示build failed,编译出错。这个过程中,它会从网上下载一些数据包,具体什么包,我也没仔细看,你编译的时候联网就是了。openssh openssl zlib 其实里面都有,所以下载的不是这些。错误部分提示如下:
/ctype.h:199: multiple definition of `toupper'
ssh.o:/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:199: first defined here
openbsd-compat//libopenbsd-compat.a(bsd-getpeereid.o): In function `tolower':
/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:193: multiple definition of `tolower'
ssh.o:/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:193: first defined here
openbsd-compat//libopenbsd-compat.a(bsd-misc.o): In function `toupper':
/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:199: multiple definition of `toupper'
ssh.o:/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:199: first defined here
openbsd-compat//libopenbsd-compat.a(bsd-misc.o): In function `tolower':
/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:193: multiple definition of `tolower'
ssh.o:/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:193: first defined here
openbsd-compat//libopenbsd-compat.a(base64.o): In function `toupper':
/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:199: multiple definition of `toupper'
ssh.o:/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/m68k-linux-gnu/libc/usr/include/ctype.h:199: first defined here

大致意思就是toupper ,tolower两个函数重复定义,我去,官网的源码竟然编译通不过,这让老夫如何是好。不知道你的能不能编译通过,可以尝试一下,其实,我将官网的安装iso安装包重新编译了一把,也不行。找到这两个函数所在的头文件crype.h,找到这两个函数定义的部分,注释掉,在编译,同样报这个错误。坑爹 啊,怎么搞,上网百度,也没找到类似解释的。不过看到有人编译基于arm的ssh。
     四、从网上下载源码开始编译,主要是修改成m68k的编译器,ltib的编译器在安装目录/opt/freescale/usr/local/gcc-4.3.43-eglibc-2.5.43/m68k-linux/bin
下m68k-linux-gnu-gcc,漫长的编译后也报错,同样的错误,郁闷,这时候决定通过修改opensshopenssl 源码替换掉这两个函数,重新定义。这两个函数实际上市大小写转换,其实很好定义,通过修改所有的文件,编译通过了。下载到文件系统 运行sshd报
提示sshd re-exec requires execution with an absolute path错误表示要绝对路径运行sshd,绝对路径运行后竟然报Illegal instruction,看来该方法单独编译不行,还是编译ltib里面的源码吧。
    五、准备ltib源码,因为ltib编译时才解压openssh openssl zlib包,编译完就删除了,所以要手动准备源码包,ltib提供命令。
./ltib -m prep -p openssl 
./ltib -m prep -p openssh
./ltib -m prep -p zlib,然后一点一点修改,费了好大劲。还是报编译出错。我靠,累死我了。看来该方法不是好办法。最后无意间想到试一把将crype.h删除,重新建一个文件,里面什么也不写。编译。竟然编译通过了,开心。
   六、编译完后记得在里面添加密钥文件,通过

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

命令实现。

下载到板子上绝对路径运行。

提示PRNG is not seeded表示创建两个节点
mknod /dev/random c 1 8
mknod /dev/urandom c 1 9
然后,有提示
提示:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/etc/ssh/ssh_host_key' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /etc/ssh/ssh_host_key
Could not load host key: /etc/ssh/ssh_host_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/etc/ssh/ssh_host_rsa_key' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_rsa_key
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/etc/ssh/ssh_host_dsa_key' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Disabling protocol version 1. Could not load host key
Disabling protocol version 2. Could not load host key
sshd: no hostkeys available -- exiting.
表示权限设置不对
#chmod 600 sshd_config ssh_host_dsa_key ssh_host_key ssh_host_rsa_key
#chmod 620 moduli
#chmod 644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub
在运行成功、且能通过putty正常登陆,不过登陆有点慢,不明原因。
总结:
      这个东西搞了好几天,不过总算搞定了,通过该过程,发现官网的东西也是有问题的,不过这个编译链有没有问题,不能断定,但真是通过修改编译链的头文件,搞定的。


相关参考文章:

1. 下载需要的源码:

    mkdir -p ~/arm/fs ;mkdir -p ~/arm/source

    下载zlib:  wget -c

    下载ssl:  wget -c

    下载ssh: wget -c

2.  编译:

    cd ~/arm/source

    (1) 编译zlib:

     tar zxvf zlib-1.2.3.tar.gz -C .

     cd zlib-1.2.3/

     ./configure --prefix=/home/itlanger/arm/fs/zlib-1.2.3

    修改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:

       tar zxvf

openssl-0.9.8d.tar.gz

     

./configure --prefix=/home/itlanger/arm/fs/openssl-0.9.8d

     os/compiler:/usr/local/arm/3.4.1/bin/arm-linux-gcc

    make

    make install

   (3)

编译openssh:

      tar zxvf openssh-4.6p1.tar.gz

      cd openssh-4.6p1/

      ./configure --host=arm-linux --with-libs --with-zlib=/home/itlanger/arm/fs/zlib-1.2.3

         --with-ssl-dir=/home/itlanger/arm/fs/openssl-0.9.8d --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

      ##不要make install

3. 安装

   

    (1) 将 openssh-4.6p1目录下的 sshd 拷贝到 目标板的/usr/sbin目录下

    (2) 再copy scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan  到目标板/usr/local/bin目录下

            copy sftp-server  ssh-keysign    到/usr/local/libexec

      

    (3) 在目标板下:

        mkdir -p /usr/local/etc/ 

        然后将openssh下的sshd_config,ssh_config 拷贝到该目录下

        mkdir -p /var/run; mkdir -p /var/empty/sshd

        chmod 755 /var/empty    

    (4)在主机上:

        

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_* 4个文件copy到目标板的 /usr/local/etc/目录下

     (5) 添加用户:

    将主机上 /etc/目下的 passwd, shadow, group 三个文件copy到目标板的 /etc目录下, 同时记得将passwd的最后 /bin/bash 该为 /bin/sh

      其实可以删除不需要的一些用户。

    

4.测试

     目标板启动sshd:  # /usr/sbin/sshd

     主机: $  ssh root@192.168.0.34

ps: 红色的那些代表让arm做ssh server时必须的


阅读(2421) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~