参考资料:最全CentOS7升级OpenSSH方案
以下这些包自行网上下载,或者虚拟机装一个最小系统,使用yumdownload下载这些资源
步骤:
1:升级openssh依赖的基础包(五个),卸载openssl和zlib能不卸载就不卸载,我因此已经玩坏几台虚拟机了
openssl-1.1.1.tar.gz,pam-1.1.8-22.el7.x86_64.rpm,pam-devel-1.1.8-22.el7.x86_64.rpm
zlib-1.2.7-17.el7.x86_64.rpm , zlib-devel-1.2.7-17.el7.x86_64.rpm
2:安装telnet,防止升级openssh之后ssh登陆不上,那就使用telnet方式登陆吧
telnet-0.17-64.el7.x86_64.rpm , telnet-server-0.17-64.el7.x86_64.rpm
xinetd-2.3.15-13.el7.x86_64.rpm
3:最后安装openssh
openssh-8.0p1.tar.gz
采用rpm -U升级安装,免得rpm -e --nodeps卸载包出现问题。
#rpm -Uvh pam-1.1.8-22.el7.x86_64.rpm
#rpm -Uvh pam-devel-1.1.8-22.el7.x86_64.rpm
安装xinted
#rpm -Uvh xinetd-2.3.15-13.el7.x86_64.rpm
安装zlib
#rpm -Uvh zlib-1.2.7-18.el7.x86_64.rpm
#rpm -Uvh zlib-devel-1.2.7-18.el7.x86_64.rpm
安装telnet
#rpm -Uvh telnet-0.17-64.el7.x86_64.rpm
#rpm -Uvh telnet-server-0.17-64.el7.x86_64.rpm
开启xinetd
#systemctl start xinetd
查看状态
#systemctl status xinetd
#systemctl enable xinetd
启动telnet
# systemctl start telnet.socket
# systemctl status telnet.socket
# systemctl enable telnet.socket
默认情况下,telnet是不允许root登录的。
执行命令:
# echo "pts/0" >> /etc/securetty
# echo "pts/1" >> /etc/securetty
#vi /etc/selinux/config
如下图将selinux设置为disable
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
关闭防火墙
# systemctl stop firewalld
编辑pam配置文件,以便telnet允许root登录。
# vi /etc/pam.d/login
如图注释这一行
编辑配置文件:
#vi /etc/pam.d/remote
如图注释这一行
auth required pam_securetty.so
重启xinetd,telnet服务
#systemctl restart xinetd
#systemctl restart telnet.socket
然后从其他服务器利用telnet测试登录(当然另外一台服务器上已经安装了telnet)
#telnet ip
输入账号密码,登录成功。
telnet可以登录,实际上是开了另外一条可以登录服务器的通道,以免ssh升级出错,造成无法登录服务器。
先确保你的服务器上已经有gcc,gcc-c++。这两个是编译工具。
#rpm -qa |grep gcc
没有安装。
则执行安装,这里我已经下载了gcc,gcc-c++的包。
如果你的服务器联网,可以执行:
#yum install gcc gcc-c++
如果没有联网,就提前下载rpm包,可以采取上面yumdownload方法从联网服务器上下载。
建议yum安装,否则你将要下载很多依赖包。
卸载旧的openssl包。
#rpm -qa |grep openssl
#for i in $(rpm -qa |grep openssl);do rpm -e $i --nodeps ;done
#tar -xvf openssl-1.1.1.tar.gz
#cd openssl-1.1.1
执行:
#./config shared
执行安装
#make && make install
安装完毕。
执行命令:
#echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
#ldconfig
配置ssl库
#mv /usr/bin/openssl /usr/bin/openssl.old
#mv /usr/include/openssl /usr/include/openssl.old
#ln -s /usr/local/bin/openssl /usr/bin/openssl
#ln -s /usr/local/include/openssl/ /usr/include/openssl
#ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
#ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
#echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
#ldconfig -v # 设置生效
查看openssl版本
#openssl version
解压openssh安装包
#tar xvf openssh-8.8p1.tar.gz
#cd openssh-8.0p1
卸载原openssh
#rpm -qa |grep openssh
卸载
#for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps ;done
执行:
#./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords--with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --without-hardening
删除原ssh配置目录
#rm -rf /etc/ssh
安装
#make && make install
安装完成,执行配置
#cp ./contrib/redhat/sshd.init /etc/init.d/sshd
#chkconfig --add sshd
#chkconfig sshd on
#chkconfig --list|grep sshd
查看版本
#ssh -V
执行命令:
#sed -i "32 aPermitRootLogin yes" /etc/ssh/sshd_config
最后重启sshd服务
#systemctl restart sshd
升级完成。
从其他服务器ssh登录升级的服务器,登录成功!