Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3057036
  • 博文数量: 396
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4209
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-04 13:04
文章分类

全部博文(396)

文章存档

2022年(1)

2021年(2)

2020年(8)

2019年(24)

2018年(135)

2017年(158)

2016年(68)

我的朋友

分类: 嵌入式

2018-11-29 15:04:38

本教程参考的百问网的步骤。
        百问网用的是:zlib-1.2.3.tar.gz,openssl-0.9.8d.tar.gz,openssh-4.6p1.tar.gz
                我进行试验时,openssl-0.9.8d.tar.gz出问题了,换成openssl-1.0.1h.tar.gz成功了。openssh也
         直接换成了openssh-5.5p1.tar.gz。
                另外,openssl版本要在0.9.8f和1.1.x之间。我完全按照下边的教程来移植zlib-1.2.11.tar.gz,
          openssl-1.0.1h.tar.gz,openssh-7.7p1.tar.gz,最后测试时,运行 /usr/sbin/sshd,出现了
          Segmentation fault。可能是版本太新的问题。

1.下载需要的源码
 
   zlib-1.2.3.tar.gz               
    openssl-1.0.1h.tar.gz      
    openssh-5.5p1.tar.gz      
    
2. 编译:
    /work/software下新建目录ssh,并且将源码复制到该目录下
    mkdir /work/software/ssh
        cp zlib-1.2.3.tar.gz openssl-1.0.1h.tar.gzopenssh-5.5p1.tar.gz /work/software/ssh
    /work/software/ssh下新建目录lib,用来保存生成的库文件。
        mkdir /work/software/ssh/lib
    
    a.编译zlib
            tar xzf zlib-1.2.3.tar.gz
            cd zlib-1.2.3/
            ./configure --prefix=/work/software/ssh/lib/zlib-1.2.3
            修改Makefile:
            CC=gcc 改为:
            CC=arm-linux-gcc
            LDSHARED= gcc 改为:LDSHARED=arm-linux-gcc
            CPP= gcc - E  改为:CPP=arm-linux-gcc - E
            AR= ar rc     改为:AR=arm-linux-ar rc
            make
            make install
            //本处如果用 prefix=/work/software/ssh/lib/zlib-1.2.3 CC=arm-linux-gcc ./configure;
               查看顶层Makefile,发现CC,LDSHARED,CPP都指定为了arm-linux-gcc,但AR不是arm-linux-ar。
               可用: prefix=/work/software/ssh/lib/zlib-1.2.3 CC=arm-linux-gcc AR=arm-linux-ar ./configure
               由此看出,配置后,一定要查看一下Makefile,若有地方不正常,要修改
              
      b.编译openssl
            cd /work/software/ssh/
            tar xzf openssl-1.0.1h.tar.gz
            ./Configure --prefix=/work/software/ssh/lib/openssl-1.0.1h os/compiler:arm-linux-gcc
            make
            make install
    
     c.编译openssh
            cd /work/software/ssh/
            tar xzf openssh-5.5p1.tar.gz
            cd openssh-5.5p1/
            ./configure --host=arm-linux --with-libs --with-zlib=/work/software/ssh/lib/zlib-1.2.3                                    --with-ssl-dir=/work/software/ssh/lib/openssl-1.0.1h --disable-etc-default-login
                 CC=arm-linux-gcc AR=arm-linux-ar
                  //.configure --help。 CC和AR其实不用指定。--host=arm-linux之后,这些就全部配置了。
            make
            //不要make install。

3. 安装
        确保目标板上有以下目录,如果没有,则新建(目录层次很重要,不要改变)
        /usr/sbin
        /usr/local/bin
        /usr/local/libexec
        /usr/local/etc/
    
    a.在 openssh-5.5p1 下创建 usr var目录,文件临时拷贝到这里,然后统一打包到开发板
        cd openssh-5.5p1
        mkdir -p usr/sbin;
        mkdir -p usr/local/bin;
        mkdir -p usr/local/libexec;
        mkdir -p usr/local/etc;
        #sshd 工作目录
        mkdir -p var/run;
        mkdir -p var/empty/sshd;
        chmod 777 var/empty
    
    b.将 openssh-5.5p1目录下的 sshd 拷贝到 目标板的 /usr/sbin 目录下
        cp sshd ./usr/sbin
    
    c. 将scp sftp sshssh-add ssh-agent ssh-keygen ssh-keyscan 到目标板/usr/local/bin
        cp scp  sftp  ssh  ssh-add  ssh-agent ssh-keygen  ssh-keyscan ./usr/local/bin
    
    d. 将 sshd_config ssh_config拷贝到 /usr/local/etc/ 目录下
        cp sshd_config ssh_config ./usr/local/etc
    
    e. 将 sftp-server ssh-keysign 到 /usr/local/libexec
        cp sftp-server  ssh-keysign ./usr/local/libexec
    
    f. 在主机上生成密钥
        ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
        ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
        ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
        将生成的 ssh_host_*_key这3个文件copy到./usr/local/etc/目录下
        cp ssh_host_* ./usr/local/etc/
    
    g. 打包
        cd /work/software/ssh_1/openssh-5.5p1
        mkdir ../final;
        cp -r usr var ../final;
        cd ../final;
        tar czvf openssh.tgz ./
        将openssh.tgz 拷贝到开发板根目录解压
            cp openssh.tgz /work/nfs_root/new_fs
            cd /work/nfs_root/new_fs
            sudo tar xzf openssh.tgz
    
    h. 在开发板 bin 目录下创建软连接
        cd /bin
        ln -s /usr/local/bin/scp
        ln -s /usr/local/bin/sftp
        ln -s /usr/local/bin/ssh
        ln -s /usr/local/bin/ssh-add
        ln -s /usr/local/bin/ssh-agent
        ln -s /usr/local/bin/ssh-keygen
        ln -s /usr/local/bin/ssh-keyscan

    i.启动开发板,添加用户
        touch /etc/passwd
        touch /etc/group
        mkdir -p /home/sshd
        adduser sshd
        adduser root
        此时:
        vi /etc/passwd;
            sshd:x:1000:1000:Linux User,,,:/home/sshd:/bin/sh
            root:x:1001:1001:Linux User,,,:/home/root:/bin/sh
        修改为
            root:x:0:0:Linux User,,,:/home/root:/bin/sh
            sshd:x:1000:1000:Linux User,,,:/home/sshd:/bin/sh
        
        vi /etc/group;
            sshd:x:1000:
            root:x:1001:
        修改为:
            root:x:0:
            sshd:x:1000:
        
        passwd root 为root用户设置密码
        修改开发板/usr/local/etc/sshd_config,将PermitRootLogin yes前的注释“#”号去掉
    
4. 测试

        开发板运行此命令: /usr/sbin/sshd
        出错:libz.so.1: cannot open shared object file: No such file or directory
        解决方法:
                 cd /work/software/ssh/lib/zlib-1.2.3/lib
                 cp *so* -d  /work/nfs_root/new_fs/lib
        ps 可以看到 /usr/sbin/sshd
        主机:ssh root@192.168.1.194    //192.168.1.194 是开发板ip
        也可以直接用MobaXterm登录。
    
        主机: ssh root@192.168.1.194
        出错:
            Host key verification failed.
        解决方法: (以下3种方法都是对主机文件的修改)
        
        法1
            rm known_hosts
        法2
            vi ~/.ssh/known_hosts
                删除对应ip的相关rsa信息
        法3
            在内网时选择最低的安全级别。在.ssh/config(或者/etc/ssh/ssh_config)中配置:
                StrictHostKeyChecking no
                UserKnownHostsFile /dev/null
                (注:为了简便,将knownhostfile设为/dev/null,就不保存在known_hosts中了)

    错误解决:
            passwd:unknown uid 0
           这表示不能为该用户设置密码,此时你会发现要passwd命令也无法使用。解决的办法是, 打开
        passwd文件,其内容为:
            root:x:1000:1000:Linux User…:/home/root:/bin/sh
        将用户ID和组ID均更改为0
            打开group文件,其内容为:
                root:x:1000:
            同样将组ID改为0
        然后,passwd命令就可以正常使用了。这时为root用户设置口令:
        #passwd root


附:passwd,shadow,group的格式:
passwd:一共由7个字段组成,6个冒号将其隔开。它们的含义分别为:
root:x:0:0:root:/root:/bin/sh
1.用户名    2.是否有加密口令,x表示有,不填表示无,采用MD5、DES加密。
3.用户ID   4.组ID   5.注释字段  6.登录目录  7.所使用的shell程序

group: 一共由4个字段组成,3个冒号将其隔开,它们的含义分别为:
root:x:0:
1.组名  2.是否有加密口令,同passwd  3.组ID  4. 指向各用户名指针的数组

shadow:一共由9个字段组成,8个冒号将其隔开,它们的含义分别为:
root:$1$3jZ93Mwq$oaeef6lWIuThavs8wD0Wh1:0:0:99999:7:::
1     用户名
2     加密后的口令,若为空,表示该用户不需要口令即可登陆,若为*号,表示该            账号被禁用。 上面的表示的是123456加密后的口令。
3     从1970年1月1日至口令最近一次被修改的天数
4     口令在多少天内不能被用户修改
5     口令在多少天后必须被修改(0为没有修改过)
6     口令过期多少天后用户账号被禁止
7     口令在到期多少天内给用户发出警告
8     口令自1970年1月1日被禁止的天数
9     保留域

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