当前位置: 首页 > news >正文

猿创征文|centos7升级openssh服务(再也不怕漏扫啦)

openssh服务是一个基础服务,这个干什么用的不用多说,为了安全(有些安全部门喜欢这个,经常扫一扫漏洞,然后说你的ssh有漏洞),因此,可能需要升级这个服务,话不多说,直接开干。

升级方式为源码编译安装,openssh的强依赖是openssl,而OpenSSL又是一个非常基础的服务,因此,两者都要升级。

一,

源码包下载

openssh下载地址:openssh-portable安装包下载_开源镜像站-阿里云  openssh计划安装的版本是8.6p

OpenSSL下载地址:/source/old/1.1.1/index.html OpenSSL计划安装的版本是1.1.1p

先安装OpenSSL

这个是sshd服务的一个强依赖,需要注意的是,仅仅是安装新版OpenSSL,lib库做一个动态链接,而旧版OpenSSL是不删除的哦。

yum group install 'Development Tools' -y
yum install -y zlib-devel openssl-devel pam-devel libselinux-devel zlib-devel gcc-c++ gcc
mv openssl-1.1.1p.tar.gz /opt/ && cd /opt
tar zxf openssl-1.1.1p.tar.gz
cd openssl-1.1.1p
#开始预编译
./config --prefix=/usr/local/openssl
#看看有么有错误,如果非零,要排错在重新来过,如果是零下一步。
echo $?
#make是正式编译
make
echo $?
#正式安装
make install && echo $?
#添加所缺函数库
echo "/usr/local/openssl/lib" >>/etc/ld.so.conf
#检查函数库
ldd /usr/local/openssl/bin/openssl
#使之生效
ldconfig  -v
#备份一哈
mv /usr/bin/openssl /usr/bin/openssl_old_bak
#强制链接一哈
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl

测试一哈:

ldd检查一定要这样才表示ssl正常哦

[root@slave1 openssl-1.1.1p]# ldd /usr/local/openssl/bin/openssl
	linux-vdso.so.1 =>  (0x00007ffc2b4db000)
	libssl.so.1.1 => /usr/local/openssl/lib/libssl.so.1.1 (0x00007fb11ab4d000)
	libcrypto.so.1.1 => /usr/local/openssl/lib/libcrypto.so.1.1 (0x00007fb11a663000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fb11a45f000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb11a243000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fb119e80000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fb11ade0000)
[root@master bin]# openssl version -a
OpenSSL 1.1.1p  21 Jun 2022
built on: Wed Aug 31 13:09:52 2022 UTC
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) 
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
OPENSSLDIR: "/usr/local/openssl/ssl"
ENGINESDIR: "/usr/local/openssl/lib/engines-1.1"

解释一哈为什么不删除旧版本的OpenSSL:因为,现在仅仅是让一会要安装的ssh能找到这个新安装的OpenSSL就可以了,旧版还是有用处的,并且这个只是强依赖不是服务,没有安全方面的问题。

三,

安装新版sshd

前面安装OpenSSL已经把编译环境安装好了,因此,直接开始安装就可以了:

mv openssh-8.6p1.tar.gz /opt && cd /opt
tar zxf openssh-8.6p1.tar.gz
cd openssh-8.6p1
mv /etc/ssh /etc/ssh_bak
#这里指定了ssl,固定了安装路径,还是预编译
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening
echo $?
#编译安装
make && make install
echo $?
#旧版备份
mv /usr/sbin/sshd /usr/sbin/sshd_bak
mv /etc/sysconfig/sshd /opt
mv  /usr/lib/systemd/system/sshd.service  /opt
#新版放入环境变量
cp -arf /usr/local/openssh/sbin/sshd /usr/sbin/sshd
#彻底删除旧版
for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps ;done
#恢复删除旧版后,跟随删除的配置文件
mv /etc/ssh/sshd_config.rpmsave /etc/ssh/sshd_config
mv /etc/ssh/ssh_config.rpmsave /etc/ssh/ssh_config
mv /etc/ssh/moduli.rpmsave /etc/ssh/moduli
#新版可执行程序放入环境变量
cp -arf /usr/local/openssh/bin/* /usr/bin/
cp -arf /usr/local/openssh/sbin/sshd /usr/sbin/sshd
#启动脚本
cp /opt/openssh-8.6p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
cp -a /opt/openssh-8.6p1/contrib/redhat/sshd.pam /etc/pam.d/
systemctl daemon-reload
service sshd restart
chkconfig --add sshd
chkconfig --level 2345 sshd on
chkconfig --list

查看一哈版本号,完美升级:

[root@master bin]# ssh -V
OpenSSH_8.6p1, OpenSSL 1.1.1p  21 Jun 2022

需要说明一哈,这个ssh升级是将原有的旧版完全清除的哦。

此时有一个新的问题出现了,比如,我升级的这个服务器主机名称是master,IP地址是192.168.217.16,在另一个主机名称为slave1,IP地址是192.168.217.17的服务器上ssh连接master,报错了:

[root@slave1 ~]# ssh master
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for master has changed,
and the key for the corresponding IP address 192.168.217.16
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /root/.ssh/known_hosts:7
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:mPvQ5bgLEFPP0OMZFFJK7Sq+zgzXmm/63vWDTur9QWY.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:4
ECDSA host key for master has changed and you have requested strict checking.
Host key verification failed.

这么一大串并没什么,说了很多,总结一句话就是原来有做免密,现在因为sshd升级了,需要更新一哈原来的密钥,怎么更新呢?

在slave1这个服务器上执行清除密钥命令就可以了:

[root@slave1 ~]# ssh-keygen -R master
# Host master found: line 4
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

现在在ssh连接就没太多的问题了:

[root@slave1 ~]# ssh master
The authenticity of host 'master (192.168.217.16)' can't be established.
ECDSA key fingerprint is SHA256:mPvQ5bgLEFPP0OMZFFJK7Sq+zgzXmm/63vWDTur9QWY.
ECDSA key fingerprint is MD5:67:b8:a0:bf:44:b1:28:d4:16:59:7b:8a:e3:9e:77:43.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'master' (ECDSA) to the list of known hosts.
Last login: Wed Aug 31 18:57:17 2022 from 192.168.217.1

最后多说一句,如果需要root用户能够登录ssh,那么,需要在配置文件中开启

echo "PermitRootLogin yes">>/etc/ssh/sshd_config
service sshd restart

 

scp 等等相关命令也是可以正常使用的,本次升级opessh成功啦。 

相关文章:

  • C++正则表达式
  • 【流行框架】Spring
  • Code For Better 谷歌开发者之声——开发者必备神器
  • 猿创征文|机器学习实战(8)——随机森林
  • 红黑树的删除
  • 猿创征文|学习记录之 PHP 中的面向对象编程
  • 猿创征文|UDP/TCP网络编程
  • 1-丁基-3-甲基咪唑双三氟甲基磺酰亚胺([BMIm] NTf2)离子液体修饰Ni镍纳米颗粒的介绍
  • 定时任务报警通知解决方案详解
  • 【js】js实现分页02
  • “结构体名”和“结构体名是个指针”的区别
  • 网课查题api接口使用方法
  • 干货分享|优炫数据库支撑GIS融合的探索
  • 重写DATAGRID控件,当对行编辑后重LOAD后可定位到最后点击的那一行。
  • 基于强化学习的空域作战辅助决策(1D)
  • __proto__ 和 prototype的关系
  • JS变量作用域
  • leetcode-27. Remove Element
  • vue.js框架原理浅析
  • Vue组件定义
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 精彩代码 vue.js
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用parted解决大于2T的磁盘分区
  • 正则表达式小结
  • elasticsearch-head插件安装
  • 阿里云服务器如何修改远程端口?
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #define、const、typedef的差别
  • #git 撤消对文件的更改
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)MFC+openGL单文档框架glFrame
  • (java)关于Thread的挂起和恢复
  • (一)基于IDEA的JAVA基础1
  • (转)EOS中账户、钱包和密钥的关系
  • (转)LINQ之路
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 简单实现MD5
  • ::什么意思
  • ??myeclipse+tomcat
  • @JoinTable会自动删除关联表的数据
  • @ModelAttribute 注解
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C++打怪升级]--学习总目录
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [Fri 26 Jun 2015 ~ Thu 2 Jul 2015] Deep Learning in arxiv
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
  • [InnoDB系列] -- SHOW INNODB STATUS 探秘
  • [iOS]GCD(一)
  • [J2ME]如何替换Google Map静态地图自带的Marker