本章为脚本编译安装openssh9.8最新版本
依赖安装包都放在了OPT目录下(安装包不一样也可以参照自行修改)
之前在解决服务器openssh漏洞是由于机器太多每次一个一个升级太麻烦
于是写下这个脚本,分享大家借鉴学习
以下为shell脚本主要内容,如果有疑问可以评论区留言(我会挨个解答)
#!/bin/bash
# 定义错误处理函数
error_exit() {
echo "\$1" 1>&2
exit 1
}
# 定义检查函数
check_and_install() {
local cmd=\$1
local install_cmd=\$2
local message=\$3
if ! command -v "$cmd" &> /dev/null; then
echo "$message"
eval "$install_cmd" || error_exit "安装失败: $message"
else
echo "$cmd 已经安装,跳过。"
fi
}
# 切换到 /opt 目录
cd /opt || error_exit "无法切换到 /opt 目录"
# 解压缩软件包
for pkg in gcc.tar.gz openssh-9.8p1.tar.gz openssl-1.1.1l.tar.gz perl-5.26.0.tar.gz zlib-1.2.8.tar.gz; do
if [ ! -d "${pkg%.tar.gz}" ]; then
tar -zvxf "$pkg" || error_exit "解压 $pkg 失败"
else
echo "$pkg 已经解压,跳过。"
fi
done
# 安装 RPM 包
cd gcc || error_exit "无法切换到 gcc 目录"
if ! rpm -q gcc &> /dev/null; then
rpm -ivh --nodeps *.rpm || error_exit "安装 RPM 包失败"
else
echo "GCC 已经安装,跳过。"
fi
# 编译和安装 zlib
cd /opt/zlib-1.2.8 || error_exit "无法切换到 /opt/zlib-1.2.8 目录"
if [ ! -f /usr/local/lib/libz.so ]; then
./configure || error_exit "配置 zlib 失败"
make -j 4 || error_exit "编译 zlib 失败"
make install || error_exit "安装 zlib 失败"
else
echo "zlib 已经安装,跳过。"
fi
# 编译和安装 Perl
cd /opt/perl-5.26.0 || error_exit "无法切换到 /opt/perl-5.26.0 目录"
if ! command -v perl &> /dev/null; then
./Configure -- Dprefix=usr/local/perl-5.26.0 || error_exit "配置 Perl 失败"
make -j 4 || error_exit "编译 Perl 失败"
make install || error_exit "安装 Perl 失败"
else
echo "Perl 已经安装,跳过。"
fi
# 编译和安装 OpenSSL
cd /opt/openssl-1.1.1l || error_exit "无法切换到 /opt/openssl-1.1.1l 目录"
if ! command -v openssl &> /dev/null; then
./config --prefix=/usr/local/openssl || error_exit "配置 OpenSSL 失败"
make -j 4 || error_exit "编译 OpenSSL 失败"
make install || error_exit "安装 OpenSSL 失败"
else
echo "OpenSSL 已经安装,跳过。"
fi
# 更新动态链接库缓存
export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH
ldconfig || error_exit "更新动态链接库缓存失败"
# 编译和安装 OpenSSH
cd /opt/openssh-9.8p1 || error_exit "无法切换到 /opt/openssh-9.8p1 目录"
if ! command -v sshd &> /dev/null; then
./configure --with-ssl-dir=/usr/local/openssl || error_exit "配置 OpenSSH 失败"
make -j 4 || error_exit "编译 OpenSSH 失败"
make install || error_exit "安装 OpenSSH 失败"
else
echo "OpenSSH 已经安装,跳过。"
fi
# 启动 OpenSSH 服务并检查版本
/usr/local/sbin/sshd || error_exit "启动 OpenSSH 服务失败"
/usr/local/sbin/sshd -V || error_exit "检查 OpenSSH 版本失败"