[Openssh] OpenSSH移植到ARM Linux教程

2019-07-12 18:27发布

OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 附加的SFTP协议可轻松实现在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,因为它们使用明文传送密码。 OpenSSH常常被误认以为与OpenSSL有关联,但实际上这两个计划的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件

1 下载

1、移植openssh需要三个包:openssh、openssl 和 zlib,地址如下: 因为它们之间没有版本所谓的版本冲突,所以都下载最新板的即可。本文以zlib-1.2.8.tar.gzopenssl-1.0.1h.tar.gzopenssh-6.6p1.tar.gz这三个版本为例,其他版本过程一样。

2 部署

因为移植过程涉及到三个包,所以先部署好工作目录,有利于移植过程的顺利进行。 $ cd # 切换到用户目录 $ mkdir ssh # 新建 ssh 工作目录 $ cd ssh # 进入 ssh 目录 $ mkdir zlib.install # 新建 zlib 安装目录,移植过程 zlib 镜像会安装到该目录 $ mkdir openssl.install # 新建 openssl 安装目录,移植过程 openssl 镜像会安装到该目录 $ export PATH=$PATH:/usr/local/arm-2010q1/bin/ # 配置交叉编译器路径到 PATH 环境变量

3 复制解压

将 zlib-1.2.8.tar.gzopenssl-1.0.1h.tar.gzopenssh-6.6p1.tar.gz 三个源码包复制到ssh目录下,并解压: $ tar zxvf zlib-1.2.8.tar.gz $ tar zxvf openssl-1.0.1h.tar.gz $ tar zxvf openssh-6.6p1.tar.gz

4 交叉编译 zlib

首先编译zlib成镜像,供最后编译 openssh 用。 $ cd zlib-1.2.8 $ prefix=/home/veryarm/ssh/zlib.install CC=arm-none-linux-gnueabi-gcc ./configure $ vi Makefile $ make $ make install 这里第二部配置的时候,prefix前面没有“--”,CC后面是交叉编译器,“./configure”要放在最后。完成后,会在指定目录“/home/veryarm/ssh/zlib.install”下生成镜像文件。

5 交叉编译openssl

编译 openssl 成镜像,也是供最后编译 openssh 用。 $ cd ../openssl-1.0.1h $ ./Configure --prefix=/home/veryarm/ssh/openssl.install  os/compiler:arm-none-linux-gnueabi-gcc $ make $ make install 其中./Configure第一个字母是大写的,交叉编译使用os/compiler来指定。

6 交叉编译openssh

编译openssh会引用上面编译的zlib和openssl的安装目录,如下。 $ cd  ../openssh-6.6p1 $ ./configure --host=arm-none-linux-gnueabi --with-libs --with-zlib=/home/veryarm/ssh/zlib.install --with-ssl-dir=/home/veryarm/ssh/openssl.install --disable-etc-default-login CC=arm-none-linux-gnueabi-gcc AR=arm-none-linux-gnueabi-ar $ make 注意:openssh不需要 make install。

7 目标板准备

确保目标板上有以下目录,若没有,则新建: /usr/local/bin /usr/local/etc /usr/libexec /var/run /var/empty 将PC机 /home/veryarm/ssh/openssh-6.6p1/ 目录下文件拷贝到目标板系统中,具体为:
  • 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

8 生成Key文件

在目标版 /usr/local/etc/ 目录下生成key文件: $ cd /usr/local/etc/ $ 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_ed25519_key 权限为 600: $ chmod 600 ssh_host_ed25519_key 其中 ssh_host_ed25519_key 是SSH第二版协议用到的key,需要修改权限,否则会提示以下错误: 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

9 目标板用户信息

打开 /etc/passwd 文件,在最后添加下面这一行: sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 如果开发板的 root 用户还没有密码,键入以下命令然输入两次密码来修改,否其他设备无法连: $ passwd root

10 测试

在目标板上运行: $ /usr/local/bin/sshd 可以用 ps 命令查看sshd是否在工作。 如果运行的过程中有提示缺少动态连接库,可以在主机上搜索相应文件,拷贝到目标板/lib/目录下面,注意创建软连接!
OK!不出意外的话可以成功, 主机上: $ ssh root@192.168.1.250(开发板的ip) 然后输入开发板的root密码就就可以了。