适用于centos7系统进行升级安装,主要针对无法连接互联网,无法使用yum命令的环境。
所需的程序和依赖离线包下载地址:
openssh9.3升级离线包 :
https://www.aliyundrive.com/s/ju995tRYtnc
提取码:16sl
将离线包中的rpm文件夹拷贝到/var/opt路径下
进入rpm文件夹,安装所有所需的rpm程序
cd /var/opt/rpm
rpm -Uvh *.rpm --nodeps --force
配置telnet-server
升级openssh过程中,可能会因为网络不好或者其它一些原因导致ssh连接断开,通过ssh方式就无法再次连接服务器了,因此升级之前我们要配置好备用的远程连接方法,这里我们使用telnet-server来作为备用连接
# 启动telnet-server并设置开机自启动
systemctl start telnet.socket && systemctl enable telnet.socket
# 如果有防火墙,则需要放行23端口
firewall-cmd --zone=public --add-port=23/tcp --permanent
# 在使用 telnet 连接服务器时,默认是不允许使用root登陆的,因此需要创建一个普通用户并赋予sudo权限
# 添加普通用户并设置密码
useradd xiaozhi
echo 123456 | passwd --stdin xiaozhi
# 增加xiaozhi账号的sudo权限
chmod u+w /etc/sudoers
vi /etc/sudoers
xiaozhi ALL=(ALL) NOPASSWD:ALL
# 上面配置完成后就可以在windows下的终端中使用telnet命令来测试连接
telnet 192.168.0.31 23
也可以直接用远程软件通过telnet的方式以及创建的用户名(xiaozhi)和密码(123456)连接服务器,确定备用远程可用再进行下面操作。
升级openssh
# 首先停止当前的ssh服务器
systemctl stop sshd
# 备份当前ssh服务
cp -a /etc/ssh /etc/ssh.bak
cp -a /usr/sbin/sshd /usr/sbin/sshd.bak
cp -a /usr/bin/ssh /usr/bin/ssh.bak
# 查看当前openssh的软件包
rpm -qa | grep openssh
openssh-clients-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
# 卸载这三个软件包
rpm -e `rpm -qa | grep openssh` --nodeps
# 解压源码包
tar -zxvf openssh-9.3p1.tar.gz
cd openssh-9.3p1
# 编译安装
./configure --prefix=/usr/local/openssh --with-ssl-dir=/usr/local/openssl --with-zlib
make
make install
# 配置启动脚本前先检查原来openssh的systemd配置文件,如果有则将其删除,防止和新的启动脚本冲突
# 正常情况下这些脚本都会在卸载老版本openssh的自动删除
ls /usr/lib/systemd/system/ssh*
rm -f /usr/lib/systemd/system/ssh*
# 拷贝启动脚本
cp contrib/redhat/sshd.init /etc/init.d/sshd
# 建立软连接
ln -s /usr/local/openssh/etc /etc/ssh
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/
ln -s /usr/local/openssh/bin/* /usr/bin/
#重新加载reloda
systemctl daemon-reload
# 启动并设置开机自启动
systemctl start sshd && systemctl enable sshd
# 查看状态,已经是 running 状态了
systemctl status sshd
# 查看版本号已经升级成功
ssh -V
OpenSSH_9.3p1, OpenSSL 1.0.2k-fips 26 Jan 2017
# ssh的默认配置文件是禁止root用户远程登录的
# 若需要root用户远程登录,则按修改如下配置文件,然后重启ssh服务即可
vi /usr/local/openssh/etc/sshd_config
#在文件最后面添加下面内容
PermitRootLogin yes
#重启sshd
systemctl restart sshd
# ssh升级完成,测试ssh连接是否正常(有条件可以重启服务再测试ssh是否连接正常)
# 测试正常后就可以删除 telnet-server 和对应的用户了,删除步骤如下
systemctl stop telnet.socket
systemctl disable telnet.socket
rpm -e telnet-server
# 删除用户
userdel -r xiaozhi# 编辑sudo配置文件,去除对应配置段
vi /etc/sudoers
# 恢复sudo配置文件的权限
chmod u-w /etc/sudoers