系统环境
CentOS Linux release 7.6.1810 (Core)
OpenSSH_7.9p1, OpenSSL 1.0.2k-fips 26 Jan 2017
升级准备
-
在打开ssh连接工具(如xshell)的同时打开文件传输工具(如xftp)。因为升级过程不能创建新的连接,以备手动上传文件需要。
-
将要升级的软件包预先下载好,如本次的
openssl-1.1.1c.tar.gz
、openssh-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.2k
、libcrypto.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不能登录时的备用登录方案
- 安装:
yum install xinetd telnet-server -y
- 配置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 }
- 配置telnet登录的终端类型,在
/etc/securetty
文件末尾增加一些pts终端,如下pts/0 pts/1 pts/2 pts/3
- 启动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
- 安装
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
- 配置
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 #重启防火墙
- 验证
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
修复升级带来的问题
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
恢复升级之外的临时配置
- 关闭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出现即可
- 恢复防火墙为初始状态