你见过不长毛的羊吗

Centos7升级OpenSSH到OpenSSH_8.0p1版本

2019.08.13

系统环境

CentOS Linux release 7.6.1810 (Core) OpenSSH_7.9p1, OpenSSL 1.0.2k-fips 26 Jan 2017

升级准备

  1. 在打开ssh连接工具(如xshell)的同时打开文件传输工具(如xftp)。因为升级过程不能创建新的连接,以备手动上传文件需要。

  2. 将要升级的软件包预先下载好,如本次的openssl-1.1.1c.tar.gzopenssh-8.0p1.tar.gz。待升级完成后删除即可。

    Openssl: https://ftp.openssl.org/source/ 任意进入一个个人目录,使用wget下载:

    	 cd /tmp
    	 wget https://ftp.openssl.org/source/openssl-1.1.1c.tar.gz
    

    Openssh: https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/ 任意进入一个个人目录,使用wget下载:

    	 cd /tmp
    	 wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz
    

注意事项

/usr/lib64目录下的libssl.so.1.0.2klibcrypto.so.1.0.2k进行备份。在升级openssl过程中着两个文件会被删除,导致yum、wget、ping等诸多命令不能使用。

cd /usr/lib64
cp libssl.so.1.0.2k /bak #/bak为备份目录
cp libcrypto.so.1.0.2k /bak

关闭selinux

临时关闭:setenforce 0 # 采用临时关闭即可 永久关闭:vi /etc/sysconfig/selinux SELINUX=enforcing改为 SELINUX=disabled 重启服务 reboot

关闭防火墙

防火墙相关操作

  • 查看防火墙状态:firewall-cmd –state
  • 开启防火墙:
    	firewall-cmd –reload  #重载配置,不会断开已有tcp会话。推荐使用
    	systemctl restart firewalld  #重启服务,会断开已有tcp会话。不推荐
    
  • 停止防火墙:systemctl stop firewalld.service #建议升级过程中关闭
  • 禁止开机启动:systemctl disable firewalld.service
  • 开放指定端口(22为例):firewall-cmd --permanent --add-port=22/tcp

安装telnet

ssh不能登录时的备用登录方案

  1. 安装:yum install xinetd telnet-server -y
  2. 配置telnet vi /etc/xinetd.d/telnet输入以下内容
    	# default: on
    	# description: The telnet server serves telnet sessions; it uses \
    	#   unencrypted username/password pairs for authentication.
    	service telnet
    	{
    		# if allow root login, disable = yes
    		disable = no
    		flags       = REUSE
    		socket_type = stream
    		wait        = no
    		user        = root
    		server      = /usr/sbin/in.telnetd
    		log_on_failure  += USERID
    	}
    
  3. 配置telnet登录的终端类型,在/etc/securetty文件末尾增加一些pts终端,如下
    	pts/0
    	pts/1
    	pts/2
    	pts/3
    
  4. 启动telnet服务
    	systemctl enable xinetd
    	systemctl enable telnet.socket
    	Created symlink from /etc/systemd/system/sockets.target.wants/telnet.socket to /usr/lib/systemd/system/telnet.socket.
    	systemctl start telnet.socket
    	systemctl start xinetd
    	netstat -lntp|grep 23
    	tcp6 0 0 :::23 :::* LISTEN 1/systemd     
    

安装依赖包(后面升级需要)

yum install  -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel  pam-devel 
yum install  -y pam* zlib*

升级openssl

cd /tmp
tar -zxvf openssl-1.1.1c.tar.gz
cd penssl-1.1.1c
./config --prefix=/usr/local/openssl #如果此步骤报错,需要安装perl以及gcc包
echo $?  #查看上一步命令是否报错
0
make
echo $?  #查看上一步命令是否报错
0
make install
echo $?  #查看上一步命令是否报错
0
mv /usr/bin/openssl /usr/bin/openssl.bak #备份
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl  #创建软连接
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf #写入 openssl 库文件的搜索路径
ldconfig -v                    #设置/etc/ld.so.conf生效
openssl version
OpenSSL 1.1.1c  28 May 2019

升级openssh

  1. 安装
    	cp -r /etc/ssh /etc/ssh.bak #备份
    	cd /tmp
    	tar -zxvf openssh-8.0p1.tar.gz
    	cd openssh-8.0p1
    	./configure --prefix=/usr --sysconfdir=/etc/ssh  --with-openssl-includes=/usr/local/openssl/include --with-ssl-dir=/usr/local/openssl   --with-zlib   --with-md5-passwords   --with-pam  #注意参数的路径
    	echo $?  #查看上一步命令是否报错
    	0
    	make && make install
    	echo $?  #查看上一步命令是否报错
    	0
    
  2. 配置
    	vi /etc/ssh/sshd_config
    	修改为以下内容
    	PasswordAuthentication yes
    	UseDNS no
    
    	cd /tmp/openssh-8.0p1
    	mv /etc/init.d/sshd /etc/init.d/sshd.bak #备份
    	cp -a contrib/redhat/sshd.init /etc/init.d/sshd  #使用新版本的执行文件
    	cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam #不存在就不管
    	sudo chmod +x /etc/init.d/sshd  #添加执行权限,非root用户安装时需要
    	chkconfig --add sshd #将sshd服务设置为开机启动
    	systemctl enable sshd  #允许sshd服务自启动
    	mv  /usr/lib/systemd/system/sshd.service  /tmp #删除或移除原来sshd文件。否则影响sshd服务重启
    	systemctl restart sshd  #重启ssh服务。(修改服务配置后都需重启,使配置生效)
    
    	#一些内容为可选
    	#修改默认端口
    	vi /etc/ssh/sshd_config
    	将Port 修改为其他端口,如2222
    	firewall-cmd --permanent --add-port=2222/tcp #防火墙开放2222端口
    	firewall-cmd –reload #重启防火墙
    
  3. 验证
    	chkconfig sshd on  #查看服务运行级别
    
    	#验证是否正常启动
    	/etc/init.d/sshd restart  
    	/etc/init.d/sshd stop
    	/etc/init.d/sshd start
    
    	systemctl restart sshd
    	systemctl stop sshd
    	systemctl start sshd
    
    	netstat -lntp  #查看sshd服务是否启动以及监听的端口(默认22)
    	ssh -V
    	OpenSSH_8.0p1, OpenSSL 1.1.1c  28 May 2019
    

修复升级带来的问题

  1. error while loading shared libraries: libssl.so.10: cannot open shared。由于libssl.so 、libcrypto.so 等库文件缺失,导致yum、ping、wget不能使用
    	cd /usr/lib64
    	cp /u01/libssl.so.1.0.2k ./
    	cp /u01/libcrypto.so.1.0.2k ./
    	ln -s libssl.so.1.0.2k ./libssl.so  #创建软连接
    	ln -s libssl.so.1.0.2k ./libssl.so.10
    	ln -s libcrypto.so.1.0.2k ./libcrypto.so
    	ln -s libcrypto.so.1.0.2k ./libcrypto.so.10
    

恢复升级之外的临时配置

  1. 关闭telnet 确保重新使用ssh登录没问题后,关闭telnet服务。
    	systemctl disable xinetd.service
    	Removed symlink /etc/systemd/system/multi-user.target.wants/xinetd.service.
    	systemctl stop xinetd.service
    	systemctl disable telnet.socket
    	systemctl stop telnet.socket
    
    	#查看telnet服务是否关闭,任选其一
    	netstat -lntp #查看23端口是否被监听
    	netstat -antp #查看23端口是否被监听
    	chkconfig –list #没有telnet出现即可
    
  2. 恢复防火墙为初始状态