1. OpenSSH简介
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制,
或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、
rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端台程序和客户
端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。
2. 下载相应的文件
移植OpenSSH需要三个文件,分别是zlib,openssl,openssh。可以到相应官网下载。
zlib官网:http://www.zlib.net/
openssl官网:https://www.openssl.org/
openssh官网:http://www.openssh.com/
本文以zlib-1.2.11.tar.gz,openssl-1.0.1d.tar.gz,openssh-6.2p2.tar.gz为例。
3. 交叉编译
用FTP工具将所下载文件上传至服务器并解压。
## 3.1 交叉编译zlib
依次执行如下指令交叉编译zlib
cd zlib-1.2.11/
prefix=$PWD/tmp CC=arm-linux-gcc ./configure //指定安装目录,交叉编译工具链
make
make install
把交叉编译出来的头文件拷贝至交叉编译工具链:
sudo cp tmp/include/* -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
把交叉编译出来的库文件拷贝至交叉编译工具链:
sudo cp tmp/lib/*so* -rf -d /work/tools/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把编译出来的库文件拷贝至NFS文件系统的lib目录:
sudo cp tmp/lib/*so* -rf -d /work/nfs_root/fs_mini_1.20/lib
## 3.2 交叉编译openssl
依次执行如下指令交叉编译openssl
cd openssl-1.0.1d/
./config shared no-asm --prefix=$PWD/tmp
修改Makefile:
CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
NM= arm-linux-nm
MAKEDEPPROG= arm-linux-gcc
删除 CFLAGS中的 -m64
CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -Wall
make
make install
把交叉编译出来的头文件拷贝至交叉编译工具链:
sudo cp tmp/include/* -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
把交叉编译出来的库文件拷贝至交叉编译工具链:
sudo cp tmp/lib/*so* -rf -d /work/tools/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把编译出来的库文件拷贝至NFS文件系统的lib目录:
sudo cp tmp/lib/*so* -rf -d /work/nfs_root/fs_mini_1.20/lib
## 3.3 交叉编译openssh
cd openssh-6.2p2/
./configure --host=arm-linux --disable-etc-default-login CC=arm-linux-gcc AR=arm-linux-ar
make
4. 测试准备
## 4.1 文件拷贝
在目标开发板创建以下目录
/usr/local/bin
/usr/local/etc
/usr/libexec
/var/run
/var/empty
将 openssh-6.2p2下在服务器上交叉编译生成的文件拷贝至目标开发板系统
scp、sftp、ssh sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan共8个文件拷贝到目标板/usr/local/bin
moduli、ssh_config、sshd_config共3个文件拷贝到目标板 /usr/local/etc
sftp-server、ssh-keysign 共2个文件拷贝到目标板 /usr/libexec
## 4.2 密钥生成
在目标开发板执行如下指令
cd /usr/local/bin
./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 ""
在/usr/local/etc目录下即生成相应的密钥
## 4.3 目标开发板用户信息创建
vi /etc/passwd
键入如下内容。首次使用目标开发板root用户没有设置密码,需执行passwd root指令设置密码。
5. openssh测试
在目标开发板上执行: /usr/local/bin/sshd,执行ps指令查看sshd是否在后台运行。若没有,可能是缺少某些动态库文件。
在PC主机上通过MobaXterm设置SSH登录方式,并登录,出现如下画面登录成功,至此,OpenSSH移植成功。