离线升级openssh及报错处理
Linux Centos6 OpenSSH版本低导致的安全漏洞 升级OpenSSH和OpenSSl来修复漏洞 由于最近公司项目需要重新部署到服务器,检查出的安全漏洞,其中 一项就是Openssh版本低过低所以导致的远程执行漏洞, 于是我就要进升级版本填补漏洞。
因为没有无外网情况,所以我下载了一个官方镜像做成yum源,镜像地址http://isoredirect.centos.org/centos/6/isos/x86_64/,如何挂载配置yum源请自行百度
首先 1、查看OpenSSH版本,在服务器输入以下命令:
# ssh -V
2、确认系统是否已经确认安装gcc编译器:
# gcc -v
如果没安装参考: https://www.imooc.com/article/17780?block_id=tuijian_wz%20yum%20-y%20install%20gcc%20gcc-c++%20kernel-devel%20//
3.升级Zlib
下载最新版本的Zlib:Zlib 官方网站:http://www.zlib.net/
# wget -c http://www.zlib.net/zlib-1.2.11.tar.gz # tar -xzvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/ # ./configure --prefix=/usr/local/zlib # make install
现在zlib 编译安装在 /usr/local/zilib中了 ,如果出现“Compiler error reporting is too harsh for ./configure (perhaps remove -Werror).** ./configure aborting.”报错,安装gcc
4.升级openssl:
openssl下载:http://www.openssl.org/source/
确认是否安装了SSI和查看版本:
# openssl version -a 或者 openssl version # cd /usr/local/src # tar -zvxf openssl-1.1.1h.tar.gz
# cd openssl-1.1.1h # ./config --prefix=/usr/local/openssl # make && make install
编译安装是出现:
报错:libgmp.so.3: cannot open shared object file: No such file
处理方法:
找到libgmp.so.*文件:
# find -name libgmp.so.* /usr/lib64/libgmp.so.10.3.2 /usr/lib64/libgmp.so.10
进入目录下做软连接:
#cd /usr/lib64 # ln -s libgmp.so.10.3.2 libgmp.so.3
如果没有报错请跳过上2步骤,进行下一步之前记得备份一下/usr/bin/openssl旧的Openssl文件
# mv /usr/bin/openssl /usr/bin/openssl.bak
将安装好的openssl 的openssl命令软连到/usr/bin/openssl:
# ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
在/etc/ld.so.conf文件中写入openssl库文件的搜索路径:
# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
使修改后的/etc/ld.so.conf生效:
# ldconfig -v
查看版本:
# openssl version
至此,Openssl升级完毕
5、关闭selinux 命令:
# vim /etc/sysconfig/selinux
修改 SELINUX=disabled,输入:wq 保存退出
临时关闭selinux:
# setenforce 0 # getenforce
关闭防火墙:
# service iptables stop
# chkconfig iptables off
6、安装telnet并开起来,防止意外导致ssh无法连接 检测telnet-server的rpm包是否安装:
# rpm -qa telnet-server
如没有输出就要安装,安装命令:
# yum install telnet-server
Centos6只需要把xinetd启动:
# service xinetd start
加入开机自启套餐:
# chkconfig --add xinetd
设置好之后显示如下 : xinetd 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
# chkconfig --list | grep xinetd
可以再看看23端口开启:
#netstat -plntu
默认情况下,系统是不允许root用户telnet远程登录的。如果要使用root用户直接登录,需设置如下内容:
修改telnet文件disable=no(原有值为yes),允许用户远程登录 # sed -i '12 s/yes/no/g'/etc/xinetd.d/telnet # echo 'pts/0' >>/etc/securetty # echo 'pts/1' >>/etc/securetty # echo 'pts/2' >>/etc/securetty # echo 'pts/3' >>/etc/securetty
Centos7安装telnet:
yum -y install telnet
yum -y install xinetd
启动服务:
启动xinetd服务systemctl start xinetd.service
xinetd开机自启动systemctl enable xinetd.service
启动telnet服务systemctl start telnet.socket
telnet服务开机自启systemctl enable telnet.socket
默认root无法远程访问,因此需要修改以下配置文件/etc/securetty而且centos7下面安装telnet没有生成/etc/xinetd.d/telnet文件
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
重启服务:
# service xinetd restart
查看下xinetd端口是否启用:
# netstat -plntu
接下来在你计算机上打开telnet客户端: 然后测试打开cmd.exe看看能不能登录,telnet+IP,回车
登录成功,接下来我们就可以安心地升级openSSH
7、下载关联包
先看看本机有没有以下软件,没有需要进行安装,这几个关联包很重要如果没有会导致ssh编译安装报错,找不到包的请到开头给的centos镜像下载挂载:
# yum -y install openssl-devel zlib-devel pam-devel
8、升级openSSH 备份旧ssh配置文件夹 /etc/ssh :
# cp -rf /etc/ssh /etc/ssh.bak
接下来就是解压安装OpenSSH,configure时注意ssl和zlib的文件目录位置:
# tar -zvxf openssh-8.4p1.tar.gz # cd openssh-8.4p1 # ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --without-hardening # make && make install
如果编译安装中出现警告,把提示中的目录进行提权:
# cd /etc/ssh //一定要进入到ssh目录中去,不然修改失败ssh服务没法启动,无法启动使用status查看 # chmod 600 ssh_host_rsa_key # chmod 600 ssh_host_ecdsa_key # chmod 600 ssh_host_ed25519_key
上面只能说明OpenSSH的客户端开始使用新版本了,但openssh-server服务端还是在用旧版的,所以我们还需要修改一下ssh的服务文件,让它开始使用新的版本,如果不进行替换,会出现openssh服务反复重启的情况,而且sshd -t 也不会报错信息
禁用原先的SSH服务,并移除服务文件
# systemctl disable sshd
# mv /usr/lib/systemd/system/sshd.service ./sshd.service.bak
在OpenSSH_8.4p1源码包/contrib/redhat/,把一些服务文件复制到系统中:
# cp /openssh-8.4p1/contrib/redhat/sshd.init /etc/init.d/sshd # cp /openssh-8.4p1/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam # chmod +x /etc/init.d/sshd
修改/etc/init.d/sshd中的SSHD路径(不清楚的find搜索):
# vim /etc/init.d/sshd
SSHD=/usr/local/sbin/sshd
最后需要修改一下/etc/ssh/sshd_config 把#PermitRootLogin yes注释打开,不然root没法登录
# vim /etc/ssh/sshd_config
PermitRootLogin yes
加入到系统服务,重启sshd,查看版本成功升级到8.4p了:
# systemctl daemon-reload
# systemctl restart sshd
# systemctl enable sshd
# ssh -V
报错总结:
1、 上面的方法会覆盖原版本的文件,make install覆盖/etc/ssh下配置文件时可能会报错。这时删掉/etc/ssh下的原配置文件,再make install一次就可以了。
2、 如果使用root远程无法登录,修改/etc/ssh/sshd_config将 PermitRootLogin 参数改为yes
3、 没有安装openssl-devel openssh编译安装会出现“configure: error: *** zlib.h missing - please install first or check config.”报错
4、没有安装pam-devel openssh编译安装会出现“ configure: error: PAM headers not found”
5、使用SecureCRT连接报错Key exchange failed
处理方法:修改/etc/ssh/sshd_config配置文件,增加如下一行,使新版本持老版本的秘钥交换算法。
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
最后,重启sshd
参考博客:https://www.cnblogs.com/xjcn/p/13470254.html
https://blog.csdn.net/hlg1995/article/details/85015643
http://blog.sina.com.cn/s/blog_7ce075830102wf0n.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步