openssh升级
二、升级前置动作
openssh升级属于高风险动作,需要放在业务低峰期,且保证telnet服务或BMC控制台可以打开。
1、确认是否安装xinetd、telnet-server服务。
#rpm -qa|egrep "xinetd|telnet-server"
2、如果没有安装则需要手动安装。
#yum install xinetd telnet-server -y
3、启动服务。
# systemctl enable telnet.socket
# systemctl enable xinetd
# systemctl start telnet.socket
# systemctl start xinetd
4、查看服务是否启动,23端口是否被占用。
5、从其他机器telnet 这台机器确认是否能登陆。
telnet 192.168.xxx.xx
如果无法安装telnet,请确保BMC可以打开远程控制台登陆服务器。
三、升级openssh
1、 查看系统目前openssh版本
本次将升级openssh至8.8p。
#ssh -V
2、升级openssl
openssh依赖openssl,升级openssh前先升级openssl,参考openssl升级。
3、 依赖包安装
#yum install -y zlib zlib-devel pam-devel gcc
#rpm -qa|egrep "zlib|zlib-devel|pam-devel|gcc" #查看依赖包
4、 将安装包上传/tmp目录并解压openssh
#cd /tmp
# tar -xf openssh-8.8p1.tar.gz
5、 备份原ssh
#cp -r /etc/ssh /etc/ssh.bak
#cp -a /usr/sbin/sshd /usr/sbin/sshd.bak
#cp -a /usr/bin/ssh /usr/bin/ssh.bak
#cp -r /etc/pam.d/sshd /etc/pam.d/sshd.bak
6、 编译安装
#cd /tmp/ openssh-8.8p1/
# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-ssl-dir=/usr/local/ssl --with-privsep-path=/var/lib/sshd
报错一:configure: error: OpenSSL library not found.
解决:rpm -ivh openssl11-devel-1.1.0i-1.el7.x86_64.rpm --nodeps --force
然后重新执行configure
#chmod -R 600 /etc/ssh #设置目录权限
#make
#make install #安装
7、 替换新的启动脚本,设置ssh开机自启
#cp /tmp/openssh-8.8p1/contrib/redhat/sshd.init /etc/init.d/sshd
#chmod +x /etc/init.d/sshd
#chkconfig --add sshd
#systemctl enable sshd
#mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak #移出老sshd的启动文件
#mv /usr/lib/systemd/system/sshd.socket /usr/lib/systemd/system/sshd.socket.bak
#vim /etc/init.d/sshd
在$SSHD $OPTIONS && success || failure上方添加
OPTIONS="-f /etc/ssh/sshd_config"
8、修改ssh配置
#vim /etc/ssh/sshd_config
PermitRootLogin yes #允许root用户登陆,确保该参数没有被注释。
注释GSSAPI相关参数
vim /etc/ssh/ssh_config
GSSAPIAuthentication yes #注释该参数
9、重启服务,生效修改的参数
#systemctl daemon-reload
#systemctl restart sshd
#systemctl status sshd
四、结果验证
1、查看版本
# ssh -V
2、查看sshd_config配置文件,正确配置如下图
grep -v ^# /etc/ssh/sshd_config |grep -v ^$
3、登陆root用户后查看环境变量PATH
env|grep PATH 缺少/usr/bin/local
解决: vim /etc/profile 添加pathmunge /usr/local/bin
source /etc/profile
source .bashrc
source .bash_profile
五、回退方案
mv /usr/lib/systemd/system/sshd.socket.bak /usr/lib/systemd/system/sshd.socket
mv /usr/lib/systemd/system/sshd.service.bak /usr/lib/systemd/system/sshd.service
mv /etc/init.d/sshd /tmp/
还原ssh配置
mv /etc/ssh /etc/ssh.new
mv /etc/ssh.bak/ /etc/ssh
chmod -R 600 /etc/ssh
还原sshd、ssh
systemctl daemon-reload
systemctl stop sshd
cp -a /usr/sbin/sshd /usr/sbin/sshd.new
cp -a /usr/sbin/sshd.bak /usr/sbin/sshd
cp -a /usr/bin/ssh /usr/sbin/sh.new
cp -a /usr/bin/ssh.bak /usr/bin/ssh
systemctl daemon-reload
systemctl restart sshd
systemctl enable sshd
验证