升级说明:
1、所有升级文件均从官网下载。
2、linux服务器系统为Centos7可适用此方案。
3、Centos7系统需要有yum源,方便解决依赖关系问题。如无法实现,则需上传同系统版本安装映像文件,作为本地yum源。
4、安装过程受网络影响极大,一旦出现不可抗因素致网络断开,可能会导致升级中断,无法远程 连接,出现此情况需现场人员配合解决。
5、升级过程出现问题需现场人员根据回退方案进行恢复操作。
升级过程:
1、安装并启用telnet
1、安装telnet
yum install -y telnet-server telnet xinet
#命令解释如下:
yum install:这是用来安装软件包的命令。
telnet-server:这是telnet服务器软件包的名称,安装后可以远程登录到系统。
telnet:这是telnet客户端软件包的名称,用于远程登录到其他系统。
xinetd:这是一个超级服务器,它管理其他服务的进程,如telnet。在安装telnet服务时,通常需要xinetd来管理telnet服务。
-y:这个选项表示自动回答所有提示为“是”,即在安装过程中不会询问用户确认。
#安装完成以后使用:检查一下是否有正确安装完成.
yum list installed | grep xinetd
yum list installed | grep telnet
#检查xinet服务是否正常启动
systemctl status xinetd
没有启动的话,启动一下:
systemctl start xinetd
设置开机自启:
systemctl enable xinetd
2、修改配置文件
vi /etc/xinetd.d/telnet
#如果没有自动生成telnet配置文件的话,需要手动创建一下
service telnet
{
disable = no
port = 23
flags = REUSE
socket_type = stream
wait = no
user = root
server =/usr/sbin/in.telnetd
log_on_failure += USERID
}
{
disable = no
# 这个选项设置为 "no" 表示服务是启用的。如果设置为 "yes",则服务将被禁用。
port = 23
# 指定服务监听的端口号。对于 telnet,默认端口是 23。
flags = REUSE
# 设置服务的标志。"REUSE" 标志允许服务重用本地地址和端口,这在某些情况下可以提高性能。
socket_type = stream
# 指定套接字类型。"stream" 表示使用面向流的套接字,这是 TCP 协议的类型。
wait = no
# 设置为 "no" 表示 xinetd 将不会等待服务进程完全启动就接受新的连接请求。
user = root
# 指定运行服务进程的用户。在这里,服务将以 root 用户身份运行。
server =/usr/sbin/in.telnetd
# 指定服务的可执行文件路径。这是启动 telnet 服务的程序。使用ll /usr/sbin/in.telnetd检查一下
文件是否存在
log_on_failure += USERID
# 在连接失败时,记录失败的尝试。"USERID" 表示记录尝试连接的用户 ID。
}
disable= no //将yes改为no
#让root可以登录,备份该文件
#mv /etc/securetty /etc/securetty.bak
#securetty是一个用于控制哪些终端设备可以以root用户身份登录的系统文件。将文件修改以后才可以使用telnet登录root用户
重启服务
systemctl restart xinetd
或重启telnet服务
service telnet.socket restart
3、启动相应服务,然后使用telnet登录到服务器
systemctl restart xinetd
(一)配置yum源
1、上传与生产环境相同的centos7版本的iso和openssh8.6p1的安装包到服务器。
链接:https://pan.baidu.com/s/1GAndZ5y7QKcv7Wg-woCd8g
提取码:ts6u
2、挂载iso
创建iso存放目录和挂载目录,并上传iso镜像文件到iso存放目录/mnt/iso下
mkdir /mnt/iso
mkdir /mnt/cdrom
mv CentOS-7.6-x86_64-DVD-1810.iso /mnt/iso/
挂载iso镜像到挂载目录/mnt/cdrom下
mount -o loop /mnt/iso/CentOS-7.6-x86_64-DVD-1810.iso /mnt/cdrom
使用df -h命令查询挂载是否成功
df -h
3、备份原本地源
进入repos配置目录
cd /etc/yum.repos.d/
创建备份文件夹
mkdir yum.repos.d.bak -p
移动配置文件到yum.repos.d.bak文件夹中
mv *.repo yum.repos.d.bak/
4、新建光盘源配置文件
vi CentOS-Media.repo
[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
gpgcheck=0
enabled=1
5、测试安装源
清除 yum 缓存中的所有数据
yum clean all
重新生成缓存
yum makecache
(二)升级openssh版本到8.6p1
1、下载或上传安装包openssh-8.6p1.tar.gz到/root目录下
进入安装包所在文件夹,创建文件夹
mkdir -p /root/linshi
mv openssh-8.6p1.tar.gz /root/linshi/
2、关闭Selinux
setenforce 0 #临时关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #永久关闭selinux
#getenforce检查是否关闭.显示Disabled则已关闭
3、安装依赖关系
yum install -y gcc pam-devel rpm-build wget zlib-devel openssl-devel net-tools
#可以使用rpm -q 检查依赖软件是否有安装上
#例:rpm -q gcc
cd到/root/linshi文件夹中解压openssh8.6p的压缩包
tar -xvf openssh-8.6p1.tar.gz
cd openssh-8.6p1/
4、卸载旧版openssh
查询旧版openssh是否存在
rpm -qa |grep openssh
ps:下一步骤为删除原有ssh,但不会影响现在进行的ssh会话,所以整个操作过程不要断开ssh会话, 否则无法再次连接,只能由现场人员进行回退后重新操作(推荐使用telnet进行升级)。
for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps;done
#rpm -qa | grep openssh:这个命令会列出所有已安装的软件包,并通过 grep 过滤出包含 "openssh" 的软件包名称。
for i in $(rpm -qa | grep openssh); do ... done:这是一个 for 循环,它遍历上一步得到的包含 "openssh" 的软件包列表。每次循环迭代都会将一个软件包名称赋值给变量 i。
rpm -e $i --nodeps:在循环体内,这个命令尝试卸载当前迭代中的软件包(由变量 i 表示)。-e 参数表示 "erase"(卸载),而 --nodeps 参数告诉 rpm 在卸载过程中忽略依赖性检查。
done:这是 for 循环的结束标志。
5、设置、编译、安装
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl/lib --without-hardening
./configure
是用于配置 OpenSSH 源代码以便进行编译和安装的。这个命令设置了一系列的配置选项,这些选项定义了 OpenSSH 的安装路径、功能和依赖关系。下面是命令中各个选项的解释:
-
./configure
:这是配置脚本的名称,通常位于源代码包的根目录中。执行这个脚本会检查系统环境并生成Makefile
,以便后续的编译过程。 -
--prefix=/usr
:设置 OpenSSH 的安装前缀为/usr
。这是大多数系统的标准安装路径。 -
--sysconfdir=/etc/ssh
:设置系统配置文件的目录为/etc/ssh
。这通常包括sshd_config
和ssh_config
文件。 -
--with-md5-passwords
:启用 MD5 加密密码的支持。请注意,MD5 是一种不再被认为是安全的加密算法,通常建议使用更安全的算法,如 SHA-256。 -
--with-pam
:启用 Pluggable Authentication Modules (PAM) 支持,允许 OpenSSH 使用 PAM 进行用户认证。 -
--with-tcp-wrappers
:启用 TCP Wrappers 支持,这是一个提供网络服务访问控制的系统。 -
--with-ssl-dir=/usr/local/ssl/lib
:指定 SSL 库文件的路径。在这个例子中,SSL 库被假定位于/usr/local/ssl/lib
。 -
--without-hardening
:禁用了一些安全硬化选项。这些选项通常用于提高系统的安全性,但在某些情况下可能会与特定的系统环境不兼容。
完成配置后
#编译
make
#安装
make install
6、设置自启动
复制启动脚本到/etc/init.d
cp contrib/redhat/sshd.init /etc/init.d/sshd
配置SSH服务
chkconfig --add sshd
chkconfig sshd on
chkconfig --list|grep sshd
sed -i "32a PermitRootLogin yes" /etc/ssh/sshd_config
-
chkconfig --add sshd
: 这个命令用于向系统的服务管理器chkconfig
添加一个新的服务条目。sshd
是 SSH 守护进程的名称,这个命令会创建一个新的服务条目,以便在系统启动时自动启动 SSH 服务。 -
chkconfig sshd on
: 这个命令用于设置sshd
服务在所有运行级别(通常是 3、4、5)上自动启动。这确保了 SSH 服务在系统启动时会被激活。 -
chkconfig --list|grep sshd
: 这个命令用于列出所有服务的状态,并使用grep
过滤出与sshd
相关的行。这可以帮助您确认sshd
服务是否已经正确设置为自动启动。 -
sed -i "32a PermitRootLogin yes" /etc/ssh/sshd_config
: 这个命令使用sed
(流编辑器)在/etc/ssh/sshd_config
文件中添加一行配置。-i
选项表示直接修改文件,32a
表示在第 32 行之后添加内容。如果第 32 行不存在,内容会被添加到文件末尾。PermitRootLogin yes
是添加的配置行,它允许 root 用户通过 SSH 登录。
重启ssh服务
service sshd restart
7、检查升级情况
输出版本号为“OpenSSH_8.6p1”,说明更新成功
ssh -V
(三)关闭telnet
关闭服务
systemctl stop telnet.socket
systemctl stop xinetd
#root可以登录
#mv /etc/securetty.bak /etc/securetty
ps:此时ssh是可以连接状态,不要断开连接防止修改出错无法连接服务器。测试新端口是否打开 telnet 127.0.0.1 22 #出现如下显示表示端口正常打开 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. SSH-2.0-OpenSSH_8.6 使用远程工具新开窗口,连接新端口测试修改是否成功,如有问题马上使用之前的连接进行检查修改。
(四)回退方案
1、挂载iso文件作为yum源
mount -o loop /mnt/iso/CentOS-7.6-x86_64-DVD-1810.iso /mnt/cdrom
2、yum安装ssh
openssh yum install openssh*
3、启动ssh服务
service sshd start