https://wenku.baidu.com/view/9f05216eaf1ffc4ffe47ac47.html
移植opensshd到ARM开发板上
1. 环境
硬件环境:
Host:X86PC
Target:ARM 开发板
软件环境:
Host:VMware虚拟机下的redhat linux 9.0(完全安装) Target:arm-linux kernel:linux-2.6.13
Crosstool: arm-linux-gcc-4.2.0
2. 准备以下源码包(下载)
下载zlib: http://www.zlib.net/zlib-1.2.3.tar.gz
下载ssl: http://www.openssl.org/source/openssl-0.9.8e.tar.gz
下载ssh: http://mirror.mcs.anl.gov/openssh/portable/openssh-4.6p1.tar.gz
3. 交叉编译 (1) 准备工作
在redhat linux 9.0下新建工作目录 mkdir /ssh
工作目录 cd /ssh 进入工作目录
mkdir compressed install source
再新建三个目录 mkdir intall/zlib-1.2.3 install/openssl-0.9.8e
compressed 用于存放源码包
install 软件安装目录
source 源码包解压目录
说明:把第2步下载的源码包放到compressed目录中
(2) 交叉编译zlib
cd /ssh/compressed/
tar xzvf zlib-1.2.3.tar.gz -C ../source cd ../source/zlib-1.2.3
./configure --prefix=/ssh/install/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
(3) 交叉编译openssl cd /ssh/compressed/
tar zxvf openssl-0.9.8e.tar.gz -C ../source
cd ../source/openssl-0.9.8e
./Configure --prefix=/ssh/install/openssl-0.9.8e os/compiler:/usr/local/arm/3.4.1/bin/arm-linux-gcc
make
make install
(4)交叉编译openssh cd /ssh/compressed
tar zxvf openssh-4.6p1.tar.gz –C ../source
cd ../source/openssh-4.6p1
./configure --host=arm-linux --with-libs --with-zlib=/ssh/install/zlib-1.2.3
--with-ssl-dir=/ssh/install/openssl-0.9.8e
--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
4. 安装
(1) 将 openssh-4.6p1目录下的 sshd 拷贝到 目标板的/usr/sbin目录下
(2) 再拷贝 scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 到目标板/usr/local/bin目录下
(3) 拷贝 sftp-server ssh-keysign 到/usr/local/libexec目录下
(4) 在目标板下:
mkdir -p /usr/local/etc/
mkdir -p /var/run;
mkdir -p /var/empty/sshd
chmod 755 /var/empty
然后将openssh-4.6p1下的sshd_config, ssh_config 拷贝到/usr/local/etc/目录下
(5)在主机上:(openssh-4.6p1目录下),重新编译x86平台 并且用超级终端运行如下命令
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_* 6个文件(即ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_key ssh_host_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub )拷贝到目标板的 /usr/local/etc/目录下
(6)修改目标板根文件系统/etc目录下的 passwd 和group文件,添加上sshd用户和组,步骤如下:
cd /etc
vi passwd
在打开的passwd文件修改后如下所示:
root::0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
sshd:*:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin―――添加sshd用户
vi group
在打开的group文件修改后如下所示:
root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:
mail:*:8:
news:*:9:
uucp:*:10:
man:*:12:
proxy:*:13:
kmem:*:15:
dialout:*:20:
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
sshd:*74:-------------添加sshd组
sudo:*:27:
audio:*:29:
dip:*:30:
www-data:*:33:
backup:*:34:
operator:*:37:
list:*:38:
irc:*:39:
src:*:40:
gnats:*:41:
shadow:*:42:
utmp:*:43:
video:*:44:
sasl:*:45:
plugdev:*:46:
staff:*:50:
games:*:60:
users:*:100:
mysql:*:64001:
nogroup:*:65534:
(7)修改sshd_config文件如下选项,其他按默认配置:
# HostKey for protocol version 1
HostKey /usr/local/etc/ssh_host_key
#HostKeys for protocol version 2
HostKey /usr/local/etc/ssh_host_rsa_key
HostKey /usr/local/etc/ssh_host_dsa_key
PermitRootLogin yes――允许根用户登陆
PermitEmptyPasswords yes――允许使用空密码,即不需要密码
UsePrivilegeSeparation no――把安全级别降低,因为不会连接互联网
# override default of no subsystems
Subsystem sftp /usr/local/libexec/sftp-server ――指定sftp服务路径,否则将不能启动sftp服务,将不能进行文件的上传和下载
(8)在开发板上(即目标板)启动sshd
此时的你只要等开发板启动好之后启动sshd服务了,使用绝对路径来启动。 /usr/local/sbin/sshd
上述启动命令可以写进启动脚本文件里,我把它添加到开发板上的/etc/init.d/rcS脚本里,系统启动完后就能提供sshd服务。
(9)特别注意的是 应用X86平台编译 当前版本的 host_key:
cd /ssh/compressed/openssh-4.6p1
./configure
make
./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 ""
生成相应版本的host_key
(10)Starting sshd:/var/empty/sshd must be owned by root and not group or world-writable.
[FAILED]
这个是权限的问题
可采取以下两步解决
chown -R root.root /var/empty/sshd
chmod 744 /var/empty/sshd
service sshd restart
就可以解决上述的问题
chown -R root.root /var/empty/