快速脚本升级【适用于服务器可联网状态】
yum install -y git
cd /root
git clone https://gitee.com/qqmiller/openssh-9.5p1-.x86_64.git
cd openssh-9.5p1-.x86_64/
bash openssh_update.sh
一、需求背景
项目等保被扫描出安全漏洞,需要升级ssh到最新版本9.5p1。
二、升级Openssl到1.1.1版本
1、查看当前openssh版本
ssh -V
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
2、Openssh最新版需要先升级openssl到1.1.1版本或以上
确保基础编译及依赖环境已安装。
yum install gcc
yum install zlib-devel
yum install openssl-devel
yum install -y net-tools.x86_64
3、下载解压
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz
tar -zxvf openssl-1.1.1c.tar.gz
4、编译安装
cd openssl-1.1.1c/
./config --prefix=/usr/local/openssl
make && make install
5、配置环境
备份原版本:mv /usr/bin/openssl /usr/bin/openssl.bak
建立软连接# ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
加载动态库:echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
使配置生效:ldconfig
查看版本:openssl version
OpenSSL 1.1.1c 28 May 2019
三、升级OpenSSH
报错1:
[root@localhost SPECS]# rpmbuild -ba openssh.spec
错误:构建依赖失败:
openssl-devel .1 被 openssh-9.5p1-1.el7.x86_64 需要
libXt-devel 被 openssh-9.5p1-1.el7.x86_64 需要
imake 被 openssh-9.5p1-1.el7.x86_64 需要
gtk2-devel 被 openssh-9.5p1-1.el7.x86_64 需要
解决:
yum install openssl-devel libXt-devel imake gtk2-devel
报错2:
[root@localhost SPECS]# rpmbuild -ba openssh.spec
错误:构建依赖失败:
openssl-devel .1 被 openssh-9.5p1-1.el7.x86_64 需要
解决:sed -i 's/BuildRequires: openssl-devel
报错3:
checking for OpenSSL_version_num... no
checking OpenSSL library version... configure: error: OpenSSL >= 1.1.1 required (have "100020bf (OpenSSL 1.0.2k-fips 26 Jan 2017)")
错误:/var/tmp/rpm-tmp.XTbXUN (%build) 退出状态不好
RPM 构建错误:
/var/tmp/rpm-tmp.XTbXUN (%build) 退出状态不好
解决:
暂未解决。
开始升级#
备份配置文件#
# cp /etc/pam.d/{sshd,sshd.bck}
# cp /etc/ssh/{sshd_config,sshd_config.bck}
安装telnet#
避免
openssh
升级识别无法登陆,安装telnet
(同时开启两个窗口)
# yum install telnet-server xinetd -y
# systemctl enable --now xinetd.service
# systemctl enable --now telnet.socket
配置
telnet
登陆
//注释auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so这一行
# sed -i 's/^auth [user_unknown=/#&/' /etc/pam.d/login
# cat >> /etc/securetty
pts/1
pts/2
EOF
//测试登陆
[C:~]$ telnet 192.168.3.179
Trying 192.168.3.179...
Connected to 192.168.3.179.
Escape character is '^]'.
Kernel 3.10.0-957.27.2.el7.x86_64 on an x86_64
localhost0 login: root
Password:
Last login: Thu Dec 31 15:28:23 from 192.168.3.144
[root@localhost0 ~]#
安装新版本#
更新
openssh
版本
# yum update ./openssh* -y
启动ssh服务#
恢复备份的配置文件,并重启sshd
# mv /etc/ssh/sshd_config.bck /etc/ssh/sshd_config
# mv /etc/pam.d/sshd.bck /etc/pam.d/sshd
# sed -i '/.*PermitRootLogin.*/d' /etc/ssh/sshd_config
# echo -e 'nPermitRootLogin yes' >> /etc/ssh/sshd_config
# sed -i '/.*PasswordAuthentication.*/d' /etc/ssh/sshd_config
# echo -e 'nPasswordAuthentication yes' >> /etc/ssh/sshd_config
# chmod 600 /etc/ssh/*
# systemctl restart sshd
验证登陆#
新开窗口连接登陆测试,没有问题后再进行下面的关闭
telnet
步骤。注意:请勿关闭当前窗口,另外新开窗口连接没问题,再关闭。
关闭 telnet#
注意:开启
telnet
的root
远程登录极度不安全,账号密码都是明文传输,尤其在公网,所以一般只限于在某些情况下内网中ssh无法使用时,临时调测,使用完后,将相关配置复原,彻底关闭telnet
服务!
# systemctl stop telnet.socket && systemctl disable telnet.socket
# systemctl stop xinetd.service && systemctl disable xinetd.service
验证当前版本#
# ssh -V
OpenSSH_8.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
build脚本#
该脚本用于制作
openssh rpm
包使用方法:
rpmbuild_openssh.sh 8.4
#!/usr/bin/env bash
# @Date :2021/1/1 15:13
# @Author :ives
# @Email :381347268@qq.com
# @File :rpmbuild_openssh.sh
# @Desc :制作openssh rpm软件包,通过tar包build
openssh_version=$1
#判断是否传入正确的软件包
if [ "${openssh_version}" ] ;then
echo -e "33[41;37m当前build的openssh版本为: ${openssh_version}33[0m"
else
echo "常用版本有:8.0, 8.1, 8.2, 8.3, 8.4"
echo
echo -e " 请输入需要build的openssh版本号 示例: 33[36;1m$0 8.433[0m"
exit 1
fi
# 安装依赖
function install_dependency() {
yum install -y wget rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip libXt-devel imake gtk2-devel openssl-libs >> /dev/null && sleep 3
}
# 下载软件包
function download_package() {
mkdir -p /root/rpmbuild/{SOURCES,SPECS}
cd /root/rpmbuild/SOURCES
echo -e "33[34;1m开始下载软件包:openssh-${openssh_version}p1.tar.gz 33[0m"
wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${openssh_version}p1.tar.gz >> /dev/null && echo "openssh-${version}p1.tar.gz下载成功..."
if [ $? -ne 0 ]; then
echo "openssh-${openssh_version}p1.tar.gz下载失败...请检查网络环境或版本是否存在"
exit 2
else
echo -e "33[34;1m开始下载软件包:x11-ssh-askpass-1.2.4.1.tar.gz 33[0m"
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz >> /dev/null && echo "x11-ssh-askpass-1.2.4.1.tar.gz下载成功..." && sleep 3
if [ $? -ne 0 ]; then
echo "x11-ssh-askpass-1.2.4.1.tar.gz下载失败...请检查网络环境是否正常"
exit 2
else
tar -xf openssh-8.4p1.tar.gz && tar -xf x11-ssh-askpass-1.2.4.1.tar.gz
fi
fi
}
# 修改配置文件和build
function config_and_build() {
cp openssh-8.4p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i 's/BuildRequires: openssl-devel /root/rpmbuild/SPECS/openssh.spec
cd /root/rpmbuild/SPECS
echo -e "33[34;1m开始制作 openssh${openssh_version} 相关rpm软件包 33[0m"
rpmbuild -ba openssh.spec
if [ $? -eq 0 ]; then
echo -e "33[34;1mopenssh${openssh_version} 相关rpm软件包制作成功,生成的软件包信息如下:33[0m"
echo
echo -e "33[33;1m软件包存放路径:/root/rpmbuild/RPMS/x86_64/ 33[0m" && ls /root/rpmbuild/RPMS/x86_64/
else
echo -e "33[33;1mopenssh${openssh_version} 相关rpm软件包制作失败,请根据报错信息进行解决,再重新进行编译 33[0m"
fi
}
function main() {
install_dependency
download_package
config_and_build
}
main
特别说明:
1)将该教程命令中的8.4p1替换为9.5p1,步骤按照该教程操作。
2)建议先临时开启telnet登陆服务,避免SSH升级失败无法连接服务器,升级成功后再关闭,同时至少建立3个连接会话,在升级成功前不要断开会话。
版权声明:本文内容始发于博客园>作者:别来无恙-,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
始发链接:https://www.cnblogs.com/yanjieli/p/14220914.html
在此特别鸣谢原作者的创作。
此篇文章的所有版权归原作者所有,商业转载建议请联系原作者,非商业转载请注明出处。