关于SSH服务的移植[转]

来源:互联网 发布:牛客网算法视频百度云 编辑:程序博客网 时间:2024/05/24 03:07

1.  移植准备

        以ubuntu作为开发平台,并设置好开发环境,如:交叉编译工具链等。当前使用的用户(ubuntu)。以机顶盒为要移植的平台,其使用的用户是sunniwell。

  1. 交叉编译SSH服务
    1. 下载zlib软件包,并进行交叉编译。

        因为zlib软件包有SSH的一个依赖库,所以要先交叉编译它,生成相应的库和文件。

    $wget http://appz.cn/software/zlib-1.2.3.tar.gz

    $tar -zxvf zlib-1.2.3.tar.gz

        由于 zlib 库的configure 脚本不支持交叉编译选项,只好自己动手了,手动临时把 gcc lnar修改成指向我们的交叉编译器 mipsel-linux-gccmipsel -linux-ldmipsel -linux-ar

    $cd /usr/bin

    $mv gcc gcc_back

    $ln –s /opt/toolchains/ crosstools_sf-linux-2.6.12.0_gcc3.4.6-20_uclibc-0.9.28-/

                 20050817-20070131/bin / mipsel -linux-gcc ./gcc

    $mv ld ld_back

    $ln –s /opt/toolchains/ crosstools_sf-linux-2.6.12.0_gcc3.4.6-20_uclibc-0.9.28-/

                 20050817-20070131/bin / mipsel -linux-ld ./ld

    $mv ar ar_back

    $ln –s /opt/toolchains/ crosstools_sf-linux-2.6.12.0_gcc3.4.6-20_uclibc-0.9.28-/

                 20050817-20070131/bin / mipsel -linux-ar ./ar

        注意:这里是通过链接的方法更改编译器,也可以把所有Makefile里的gcclnar手动改成mipsel-linux-gccmipsel -linux-ldmipsel -linux-ar,但这样比较慢。

        修改好以后,回到原来安装目录下,进行编译和安装。

    $cd ~/zlib-1.2.3

    $ ./configure --prefix =/usr/local/zlib

        注意:这里的配置指向/usr/local/zlib目录,软件包会自动安装在/usr/local/zlib目录下,以方便后面交叉编译Openssh时能找到这个库。

    $make

    $sudo make install

        注意:不用马上把交叉编译改回来,后面还要用到。

  1.  
    1. 下载Openssl软件包,并进行交叉编译。

        因为Openssl软件包有SSH的两个依赖库,所以要先交叉编译它,生成相应的库和文件。

    $wget http://down1.chinaunix.net/distfiles/openssl-0.9.7e.tar.gz

    $tar -zxvf openssl-0.9.7e.tar.gz

        由于Openssl 库的configure 脚本也不支持交叉编译选项,只好自己动手了。因为在交叉编译zlib软件包时已经做好了链接,这里不用做。

    $cd ~/openssl-0.9.7e

    $ ./configure --prefix =/usr/local/openssl

        注意:这里的配置指向/usr/local/ openssl 目录,软件包会自动安装在/usr/local/ openssl目录下,以方便后面交叉编译Openssh时能找到这两个库。

    $make

    $sudo make install

        安装完以后,把编译器改回来。

    $cd /usr/bin

    $mv gcc_back gcc

    $mv ld back_ld

    $mv ar back_ar

  1.  
    1. 下载Openssh软件包,并进行交叉编译。

        Openssh 库的configure 脚本支持交叉编译选项,而且还提供了其它有用的选项,所以比较好配置。

    $wget http://down1.chinaunix.net/distfiles/openssh-3.9p1.tar.gza

    $tar -zxvf openssh-3.9p1.tar.gza

    $cd openssh-3.9p1

    $AR=mipsel-linux-ar LD=mipsel-linux-ld CC=mipsel-linux-gcc ./configure --host=mipsel-linux --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl

        遇到的问题:1、在执行配置文件configure时,没有加zlib的软件库,要加上--with-zlib=/usr/local/zlib2、在执行配置文件configure时,没有加openssl的软件库,要加上--with-zlib=/usr/local/ openssl3test program无法在交叉编译中执行,去掉configure文件里的所有test program

    $make

  1. 配置SSH服务端
    1. 修改服务器配置文件sshd_config。

        $vi sshd_cinfig

        以下是sshd_config的配置与说明:

        Port 22

        #sshd监听22端口

        Protocol 2

        #使用协议版本2

        ListenAddress 0.0.0.0

        #sshd监听所有目标ip的请求

        HostKey /usr/local/etc/ssh_host_rsa_key

        #ssh服务器rsa算法私钥路径

        HostKey /usr/local/etc/ssh_host_dsa_key

        #ssh服务器dsa算法私钥路径

        KeyRegenerationInterval 3600

        #设置在3600秒之后自动重新生成服务器的密匙(如果使用密匙)。

        ServerKeyBits 1024

        #定义服务器密匙的位数为1024位

        SyslogFacility AUTH

        #设置在记录来自sshd的消息的时候,是否给出“facility code”

        LogLevel INFO

        #设置记录sshd日志消息的层次

        LoginGraceTime 120

        #如果用户不能成功登录,在120秒后切断与服务器的连接

        PermitRootLogin yes

        #允许超级用户登录

        StrictModes yes

        #检查用户家目录和rhosts文件的权限和所有权

        RhostsRSAAuthentication no

        #不用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证

        IgnoreUserKnownHosts yes

        #安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”

        IgnoreRhosts yes

        #设置验证的时候使用“rhosts”和“shosts”文件

        X11Forwarding no

        #禁止用户运行远程主机上的X程序

        PrintLastLog yes

        #打印一次登陆日记

        #######如果选择口令认证则:##########

        PasswordAuthentication yes

        #使用口令认证

        PermitEmptyPasswords no

        #不允许使用空密码的用户登录

        PubkeyAuthentication no

        #不使用非对称密钥认证

        #######如果选择非对称密钥认证则:#######

        PasswordAuthentication yes

        #使用口令认证

        RSAAuthentication yes

        #允许只有RSA安全验证

        PubkeyAuthentication yes

        #使用非对称密钥认证

        修改完sshd_config配置文件后,把它挂载到机顶盒/usr/local/etc/下。

  1.  
    1. 生成服务器密钥。

        把可执行文件ssh-keygen 挂载到机顶盒/usr/bin/下,并运行它,生成相应的密钥。

        $chmod +x /usr/bin/ssh-keygen

        $/usr/bin/ssh-keygen -b 1024 -d -f /usr/local/etc/ssh_host_dsa_key

        $/usr/bin/ssh-keygen -b 1024 -f /usr/local/etc/ssh_host_rsa_key -t rsa

        执行完以后,会在/usr/local/etc/目录下生成以下文件:ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub。这些文件都是有用的,sshd服务程序起动时需要它们。

  1.  
    1. 添加passwd用户

        在机顶盒文件 /etc/passwd 里面增加一行:

        sshd:x:65533:65534:SSH:/var/empty/sshd:/sbin/nologin

  1.  
    1. 起动ssh服务端。

        把可执行文件sshd挂载到机顶盒/usr/bin/下,就要以起动服务了。

        $/usr/bin/sshd

  1. 配置SSH客户端
    1. 选择口令认证登陆。(如果配置文件sshd_config选择了口令认证则)

        window系统下运行putty.exe

        SessionàHost Name: 172.16.5.157

        SessionàConnection type: SSH

        SessionàPort: 22

        运行putty.exe后,输入用户名和密码后就可以登陆了。

        可能遇到的问题:当输入用户名后,连接断开,提示信息为:Connection closed by 172.16.5.157。问题出在getspnam函数不能执行,它所需的库不存在。getspnam函数主要是用来提取shadow文件的用户密码信息,而机顶盒上的用户密码信息是放在passwd中,所以可以不执行它,注释以后就要以通过了。

  1.  
    1. 选择非对称密钥认证登陆。
  1. 生成密钥对

      window系统下运行puttygen.exe,并进行设置:

  •  

          Type of key to generate: SSH-2 RSA

  •  

          Number of bits in a generated key: 1024

        点击 Generate”生成密钥对

        注意:在生成时是要不断移动鼠标,它需要鼠标的随机坐标。

        “Save public key”保存公钥如:Key

        “Save private key”保存私钥如:Key.ppk

      2.把以上生成的公钥放到服务器端(机顶盒)

           在机顶盒系统用户根目录中建立.ssh目录,并在其目录下建立一个放置公钥的文件authorized_keys 。

           ~/.ssh/$ vi authorized_keys

           把刚才在puttygen.exe 中生成的key的内容写入到这个文件里。文件格式如:ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx rsa-key-20070815

          注意:Putty生成的文件在LINUX中可能会出现分行而不是单行的文本,而且不一定是以上的格式,要把它串成一行,并按以上面格式,authorized_keys中一行代表一个KEY

   3.测试登陆

      在window系统下运行putty.exe,并进行设置:

  •  

      Session àHost Name: 172.16.5.157

  •  

      Connectionà Data àAuto-login username: sunniwell

  •  

      Connection à SSHà Auth: (选择刚刚生成的私钥) key.ppk

         如果在生成密钥对时用了密钥密码,在登陆时也要输入密钥密码,否则可以直接进去了。

原创粉丝点击