玉米糊 发表于 2013-8-27 11:55:47

成功移植OpenSSH到ARM Linux开发板

概述如果是用到一些没有SSH的开发板,对于部分的应用开发来说,会受到影响,比如使用ARM DS-5进行RSE远程管理操作时,就会出现错误。下面就具体如何进行OPENSSH移植进行详细介绍。

步骤1.下载源码包如下,下载 openssh、openssl 和 zlib 三个包。
openssh
[*]本地下载:
[*]官网下载:http://www.openssh.com/portable.html
openssl

[*]本地下载:
[*]官方下载:http://www.openssl.org/source
zlib

[*]本地下载:
[*]官方下载:http://www.zlib.net/

2.部署工作目录创建用户主目录下创建工作目录:
$ mkdir /home/gary/work
$ cd /home/gary/work

在 work 目录下面创建安装目录:

$ mkdir install$ mkdir install/zlib
$ mkdir install/openssl

3.解压并编译
把以上下载的3个安装包复制到 work 目录下,并解压,解压命令:

$ tar zxvf zlib-1.2.8.tar.gz
$ tar zxvf openssl-1.0.1h.tar.gz$ tar zxvf openssh-6.6p1.tar.gz

a)交叉编译 zlib
$ cd zlib-1.2.8
$ ./configure --prefix=/home/gary/work/install/zlib
$ vi Makefile
将 Makefile 中的交叉编译工具改成当前开发板使用的交叉编译工具:

CC=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
AR=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-ar
CPP=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
LDSHARED=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
$ make
$ make install
b)交叉编译openssl
$ cd ../openssl-1.0.1h
$ ./Configure --prefix=/home/gary/work/install/opensslos/compiler:/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
$ make
$ make install
c)交叉编译openssh
$ cd../openssh-6.6p1
$ ./configure --host=arm-none-linux-gnueabi --with-libs --with-zlib=/home/gary/work/install/zlib --with-ssl-dir=/home/gary/work/install/openssl --disable-etc-default-login CC=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-gcc AR=/usr/local/arm-2010q1/bin/arm-none-linux-gnueabi-ar
$ make

注意:openssh不需要make install

4.操作目标板
a)确保目标板上有以下目录,若没有,则新建:
/usr/local/bin
/usr/local/etc
/usr/libexec
/var/run
/var/empty


b)从PC机上将以下文件拷贝到目标板Linux系统中
PC机 /home/gary/work/openssh-6.6p1/ 目录下的
[*]scpsftpssh sshdssh-addssh-agentssh-keygenssh-keyscan 共8个文件拷贝到目标板 /usr/local/bin
[*]moduli ssh_config sshd_config 共3个文件拷贝到目标板 /usr/local/etc
[*]sftp-serverssh-keysign 共2个文件拷贝到目标板 /usr/libexec

c)生成Key文件
在PC机 /work/ssh/source/openssh-6.6p1/ 目录下运行:

$ ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
$ ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
$ ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
$ ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""

将生成的 ssh_host_*_key 这4个文件copy到目标板的 /usr/local/etc/ 目录下。其中 ssh_host_ed25519_key 是SSH第二版协议用到的key,放到开发板之后,要修改权限为 600,否则会提示以下错误:
Permissions 0644 for '/usr/local/etc/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /usr/local/etc/ssh_host_ed25519_key
Could not load host key: /usr/local/etc/ssh_host_ed25519_key
修改权限的命令为:
# chmod 600 /usr/local/etc/ssh_host_ed25519_key

d)修改目标板passwd文件。
在 /etc/passwd 文件最后添加下面这一行:
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

5.测试
如果开发板的 root 用户还没有密码,键入以下命令然输入两次密码来修改,否其他设备无法连:
# passwd root
在目标板上运行:
# /usr/local/bin/sshd
可以用 ps 命令查看sshd是否在工作
如果运行的过程中有提示缺少动态连接库,可以在主机上搜索相应文件,拷贝到目标板/lib/目录下面,注意创建软连接!
OK!不出意外的话可以成功,

主机上:
$ ssh root@192.168.1.250(开发板的ip)
然后输入开发板的root密码就就可以了,如下图连接成功:



相关帖子
SSH 移植到 ARM Linux 开发板上错误总结:http://bbs.myir-tech.com/thread-6167-1-1.html


页: [1]
查看完整版本: 成功移植OpenSSH到ARM Linux开发板