关于SSH服务的移植[转]

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值