openssh9.6 源码编译与交叉编译
环境
- ubunut18.04。x86平台
- openssh9.6,这里我是要移植到别的机器。不是在本地使用
- 所以我要编出两个版本 x86和arm
ubunut x86版本编译过程
准备工作
- 安装依赖库,可以通过apt包管理安装,也可以源码安装(推荐源码安装然后再编译openssh的时候给路径),我们这里需要zlib,openssl和pam
- linux安装pam库 https://github.com/linux-pam/linux-pam/releases/tag/Linux-PAM-1_1_8
- centos
sudo yum install pam-deval - ubuntu
sudo apt-get install libpam0g-dev
- zlib开发库,一定下载开发库
sudo apt install zlib1g-dev - openssl库
检查是否已安装openssl:
sudo apt-get install openssl
如果已安装执行以下操作:
sudo apt-get install libssl-dev
sudo apt-get install libssl0.9.8
编译openssh
./configure --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/ssl --with-zlib=/usr/local/zlib --with-pam --without-openssl-header-check
参数解析:缺一不可
因为我的ssl和zlib是源码编译的所以位置是我指定的,然后--sysconfdir是sshd服务的默认配置文件的路径,需要写成你目标机器的sshd_config文件位置,不然你就需要指定路径,这里的with-pam的模块我是包管理工具安装的,所以是默认路径不需要指定
然后make 就可以
最后提取目标
make install prefix=./obj
所有文件都会提取到这里,可以打包到别的机器
交叉编译aarch64版本 openssh9.6
x86 ubuntu安装aarch64交叉编译工具
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
准备工作
openssh源码 https://www.openssh.com/portable.html
openssl源码
zlib源码
pam源码(看自己需求)
上面的自己找连接下载吧
交叉编译依赖
openssl
<配置自己工具链的环境变量>
<保证aarch64-linux-gnu- tab键能自动补全就可以,不需要CROSS_COMPILE CC CXX等环境变量>
tar -xzf openssl-OpenSSL_1_1_1a.tar.gz
cd openssl-OpenSSL_1_1_1a/
./Configure linux-aarch64 --cross-compile-prefix=aarch64-linux-gnu- --prefix=/home/wjk/install/openssl shared
make
make install
交叉编译zlib
export CROSS_COMPILE=aarch64-linux-gnu-
export CC=aarch64-linux-gnu-gcc
export AR=aarch64-linux-gnu-ar
export RANLIB=aarch64-linux-gnu-gcc-ranlib
CFLAGS="-fPIC" ./configure --shared --prefix=/home/wjk/install/zlib
make
make install
交叉编译openssh
./configure --host=aarch64-linux-gnu --prefix=/home/fangkai/openssh_bypass1043/openssh-9.6p1/build_x86 --with-ssl-dir=/home/fangkai/openssh_bypass1043/openssl-3.2.1/build_x86 --with-zlib=/home/fangkai/openssh_bypass1043/zlib-1.3.1/build_x86 --with-pam=/home/fangkai/openssh_bypass1043/linux-pam-1.6.0/build_x86 LDFLAGS="-static -pthread" --sysconfdir=/etc/ssh
make
然后把可执行文件和动态连接库拿到aarch64设备上就可以运行了