1. 准备工作
OpenSSH
依赖 zlib
、OpenSSL
。
源码下载:
-
zlib
zlib.net -
OpenSSL
openssl.org -
OpenSSH
mirrors.aliyun.com
本文基于 zlib-1.2.11
、openssl-1.1.1k
、openssh-8.6p1
撰写。
2. 交叉编译
2.1. zlib
2.1.1. 配置 Makefile
|
|
CHOST
zlib 的 configure 使用此变量自动配置交叉编译工具的前缀,按上述配置,即自动将交叉编译工具名称设为 arm-linux-gcc、arm-linux-ld 等。
2.1.2. 编译与安装
|
|
将安装在 --prefix
所指定的目录。
2.2. OpenSSL
参考之前的文章 移植 OpenSSL。
2.3. OpenSSH
2.3.1. 配置 Makefile
|
|
-
CC
指定交叉编译工具。 -
--host
目标平台,交叉编译时需指定。 -
--with-zlib
指定 zlib 的安装位置。 -
--with-ssl-dir
指定 openssl 的安装位置,如果 openssl 下有共享库,则编译时自动使用 openssl 的共享库(按照上述配置情况下),否则使用静态库。
此处使用默认路径,不设置 –prefix。
2.3.2. 编译
|
|
注意:这里不要安装。
3. 在目标板上使用
3.1. 安装至目标板
3.1.1. 准备工作
-
确保目标板上有以下目录,没有则创建
- /usr/libexec
- /usr/local/bin
- /usr/local/etc
-
在目标板
/etc/passwd
文件中添加一行1
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-
设置 root 用户密码(已设置则忽略)
1
passwd -a md5 root
3.1.2. 拷贝程序至目标板
-
将 OpenSSH 交叉编译后的文件(在
openssh-8.6p1
根目录)拷贝至目标板相应目录文件名 目标板目录 sftp-server /usr/libexec ssh-keysign /usr/libexec sshd /usr/local/bin ssh /usr/local/bin scp /usr/local/bin sftp /usr/local/bin ssh-add /usr/local/bin ssh-agent /usr/local/bin ssh-keygen /usr/local/bin ssh-keyscan /usr/local/bin sshd_config /usr/local/etc ssh_config /usr/local/etc 此为默认路径,若在配置时设定了相关目录,则按设定修改。
-
在目标板建立软链
1 2 3 4 5 6 7 8 9
cd /usr/bin ln -s ../local/bin/sshd && \ ln -s ../local/bin/ssh && \ ln -s ../local/bin/scp && \ ln -s ../local/bin/sftp && \ ln -s ../local/bin/ssh-add && \ ln -s ../local/bin/ssh-agent && \ ln -s ../local/bin/ssh-keygen && \ ln -s ../local/bin/ssh-keyscan
-
修改目标板上的 sshd_config 文件
原内容:1 2 3 4 5
... #Port 22 ... #PermitRootLogin prohibit-password ...
修改为:
1 2 3 4 5
... Port 22 ... PermitRootLogin yes ...
3.2. 建立工作目录
-
在目标板上建立工作目录
1 2
mkdir /var/run mkdir -p /var/empty/sshd
-
确保目标板
/var/empty/sshd
的权限为755
1
chmod -R 755 /var/empty
-
在目标板上挂载
devpts
1 2
mkdir /dev/pts mount devpts -t devpts /dev/pts
3.3. 生成密钥
|
|
3.4. 开启 sshd
|
|