文章目录
-
- 源码包下载
- [openssl 编译](#openssl 编译)
- [openssh 编译](#openssh 编译)
-
- [1. 安装基础软件](#1. 安装基础软件)
- [2. 编译openssh](#2. 编译openssh)
- [3. 重启sshd](#3. 重启sshd)
- [openssh rpm构建](#openssh rpm构建)
-
- [1. 安装rpmbuild](#1. 安装rpmbuild)
- [2. 安装编译软件](#2. 安装编译软件)
- [3. 目录构建](#3. 目录构建)
- 异常处理
-
- [` ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin() `](#
ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin()
)
- [` ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin() `](#
源码包下载
-
openssh下载:
-
openssl下载:
https://github.com/openssl/openssl/releases?page=2
openssl从github release页面下载
openssl-3.4.1.tar.gz
openssl 编译
编译
bash
# 解压
tar -xf openssl-3.4.1.tar.gz
# 进去
cd openssl-3.4.1
#编译配置openssl安装目录
./config --prefix=/usr/local/openssl
#安装
make && make install
#复制openssl文件到/usr/bin/下
cp /usr/local/openssl/bin/openssl /usr/bin/
# 添加动态链接库数据
echo '/usr/local/openssl/lib64/' >> /etc/ld.so.conf
# 更新动态链接库
ldconfig
#创建软连接
ln -sf /usr/local/openssl/lib/libssl.so.3 /usr/lib/libssl.so.3
# 验证版本
openssl version
异常处理
bash
# 报错处理:
openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
# 解决方案
# 创建软连接
ln -sf /usr/local/openssl/lib/libssl.so.3 /usr/lib/libssl.so.3
openssh 编译
1. 安装基础软件
在编译openssh之前需要安装基础软件:
bash
yum -y gcc tar make zlib-devel pam-devel cyrus-sasl-ldap
zlib源码编译
如果zlib-devel
可以通过yum包管理器安装,则可以忽略此步骤。
bash
tar -zxvf zlib-1.3.1.tar.gz -C /opt/
cd /opt/zlib-1.3.1
./configure --prefix=/usr/local/zlib
make && make install`
2. 编译openssh
bash
tar -zxvf openssh-10.0p1.tar.gz -C /opt/
cd openssh-10.0p1
# 源码编译zlib(二选一)
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/openssl \
--with-zlib==/usr/local/zlib \
--with-pam
# yum安装zlib(二选一)
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/openssl \
--with-zlib \
--with-pam
# 编译
make && make install
3. 重启sshd
-
检查sshd的配置文件,是否适配新版本:
bash[root@localhost ~]# sshd -t /etc/ssh/sshd_config: line 157: Bad configuration option: GSSAPIKexAlgorithms /etc/ssh/sshd_config: terminating, 1 bad configuration options
可以看到问题行号,直接注释掉问题行就可以。
sshd -t
没有报错了,继续下一步 -
重启sshd
bashsystemctl restart sshd
-
检查版本
bash[root@localhost ~]# ssh -V OpenSSH_10.0p2, OpenSSL 3.4.1 11 Feb 2025
openssh rpm构建
openrpm包构建后,rpm包可以分发到其他主机进行安装,而不用构建openssh编译环境。
1. 安装rpmbuild
bash
yum install -y rpmdevtools rpmlint
2. 安装编译软件
bash
yum install -y glibc-devel krb5-devel
yum install -y gtk2-devel libXt-devel openssl-devel imake
3. 目录构建
-
生成构建目录
bashrpmdev-setuptree
构建目录如下所示:
bash[root@localhost ~]# tree -L 2 /root/rpmbuild/ /root/rpmbuild/ ├── BUILD │ └── openssh-9.7p1 ├── BUILDROOT ├── RPMS │ ├── aarch64 │ └── x86_64 ├── SOURCES │ ├── openssh-9.7p1.tar.gz │ └── x11-ssh-askpass-1.2.4.1.tar.gz ├── SPECS │ └── openssh.spec └── SRPMS └── openssh-9.7p1-1.oe1.bclinux.src.rpm
-
拷贝spec文件和源码包
bash# spec文件位于openssh-10.0p2.tar.gz源码包, 解压到openssh-10.0p1 cp -f openssh-10.0p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/ cp -f openssh-10.0p2.tar.gz /root/rpmbuild/SOURCES/ # x11-ssh-askpass cp -f x11-ssh-askpass-1.2.4.1.tar.gz /root/rpmbuild/SOURCES/
x11-ssh-askpass下载:https://mirrors.aliyun.com/slackware/slackware64/source/xap/x11-ssh-askpass/
-
修改spec文件
bash
# spec文件在%files server 部分添加此行:
%attr(0755,root,root) %{_libexecdir}/openssh/sshd-auth
- 开始构建
bash
rpmbuild -bb /root/rpmbuild/SPECS/openssh.spec
之后就可以在 /root/rpmbuild/RPMS
目录下发现当前架构的rpm包。
异常处理
ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin()
openssh编译完,运行需要的软件cyrus-sasl-ldap
:
bash
# 安装 SASL LDAP 模块(可能包含在 cyrus-sasl-ldap 包中)
yum install cyrus-sasl-ldap
不装这个, openssh启动会报错ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin()
。
这个错误 ldapdb_canonuser_plug_init() failed in sasl_canonuser_add_plugin()
通常与 Cyrus SASL(Simple Authentication and Security Layer) 配置相关,特别是当 SASL 尝试加载 ldapdb
插件(用于通过 LDAP 数据库处理用户名规范化)时初始化失败。
安装办法:
- Debian/Ubuntu 系统:
bash
# 安装 SASL LDAP 模块
sudo apt install sasl2-modules-ldap
- CentOS/RHEL 系统:
bash
# 安装 SASL LDAP 模块(可能包含在 cyrus-sasl-ldap 包中)
sudo yum install cyrus-sasl-ldap