- 论坛徽章:
- 0
|
关于SSH服务的移植
(一) 移植准备
以ubuntu作为开发平台,并设置好开发环境,如:交叉编译工具链等。当前使用的用户(ubuntu)。以机顶盒为要移植的平台,其使用的用户是sunniwell。
(二) 交叉编译SSH服务
a) 下载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 、ln、ar修改成指向我们的交叉编译器 mipsel-linux-gcc、mipsel -linux-ld、mipsel -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里的gcc、ln、ar手动改成mipsel-linux-gcc、mipsel -linux-ld、mipsel -linux-ar,但这样比较慢。
修改好以后,回到原来安装目录下,进行编译和安装。
$cd ~/zlib-1.2.3
$ ./configure --prefix =/usr/local/zlib
注意:这里的配置指向/usr/local/zlib目录,软件包会自动安装在/usr/local/zlib目录下,以方便后面交叉编译Openssh时能找到这个库。
$make
$sudo make install
注意:不用马上把交叉编译改回来,后面还要用到。
b) 下载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
c) 下载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/zlib。2、在执行配置文件configure时,没有加openssl的软件库,要加上--with-zlib=/usr/local/ openssl。3、test program无法在交叉编译中执行,去掉configure文件里的所有test program。
$make
(三) 配置SSH服务端
a) 修改服务器配置文件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/下。
b) 生成服务器密钥。
把可执行文件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服务程序起动时需要它们。
c) 添加passwd用户
在机顶盒文件 /etc/passwd 里面增加一行:
sshd:x:65533:65534:SSH:/var/empty/sshd:/sbin/nologin
d) 起动ssh服务端。
把可执行文件sshd挂载到机顶盒/usr/bin/下,就要以起动服务了。
$/usr/bin/sshd
(四) 配置SSH客户端
a) 选择口令认证登陆。(如果配置文件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中,所以可以不执行它,注释以后就要以通过了。
b) 选择非对称密钥认证登陆。
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
如果在生成密钥对时用了密钥密码,在登陆时也要输入密钥密码,否则可以直接进去了。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/88620/showart_1778925.html |
|