记一次手动将OpenSSH从7.4升级到9.3的过程
前言
收到通知说服务器组件存在漏洞
服务器版本:CentOS 7.9.2009 x86_64
目前SSH版本:OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
使用yum
升级yum update -y openssh
最新版本还是:OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
接下来尝试手动升级
前置操作
为了避免升级过程中出现的意外导致服务器无法进行连接,建议对重要的内容先进行备份
创建快照
在主机服务商那里为主机创建快照,防止最糟糕的事情发生
备份配置文件
备份 /etc/pam.d/sshd 文件
[root@bogon ~]# mv /etc/pam.d/sshd /etc/pam.d/sshd-bak
[root@bogon ~]# ls -l /etc/pam.d/sshd*
-rw-r--r-- 1 root root 904 Nov 25 2021 /etc/pam.d/sshd-bak
安装telnet
升级过程中会卸载旧版本 ssh
导致远程无法连接,所以先安装一个 telnet
安装
rpm -q telnet-server
#检查是否安装了telnet服务端
rpm -q telnet
#检查是否安装了telnet客户端
提示package telnet-server is not installed
表示未安装
yum install telnet-server -y
#安装telnet服务端
yum install telnet -y
#安装telnet客户端
启动
systemctl enable telnet.socket
#设置开机启动该
systemctl start telnet.socket
#打开服务
防火墙开放23
端口
使用telnet ip地址
进行连接登录
允许root登录
默认系统不允许root用户使用telnet远程登陆
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
可能还需要添加下 pts/3 和 pts/4
输入正确的密码还是不能登录
主机端执行:tail /var/log/secure
看到了access denied: tty 'pts/3' is not secure !
再添加一个
echo 'pts/3' >>/etc/securetty
重启了telnet
后再登录一切正常了
开始升级
执行下方操作前,请确认telnet外部连接正常
下载升级包
可用版本下载
http://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
地址中列出了可用的版本升级文件,我本次计划升级到9.3
,使用的是openssh-9.3p1.tar.gz
可以使用本地网络下载压缩包后上传到服务器opt
目录,也可以在服务器内执行命令下载
cd /opt/
wget http://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz
解压
tar -zxvf openssh-9.3p1.tar.gz
cd openssh-9.3p1
安装依赖
安装
务必确认已快照,已配置telnet
备份配置文件
cp /etc/ssh/sshd_config sshd_config.backup
cp /etc/pam.d/sshd sshd.backup
卸载旧版本
rpm -e --nodeps `rpm -qa | grep openssh`
安装依赖
yum -y install gcc pam-devel zlib-devel openssl-devel
编译配置
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-pam
编译安装
make && make install
调整文件权限
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
复制配置文件
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
还原配置文件
mv ../sshd.backup /etc/pam.d/sshd
mv ../sshd_config.backup /etc/ssh/sshd_config
添加开机启动
chkconfig --add sshd
chkconfig sshd on
重启sshd
systemctl restart sshd
#重启
ssh -V
#查看版本
成功升级到OpenSSH_9.3p1, OpenSSL 1.0.2k-fips 26 Jan 2017
登录验证,如果出错,可以查看踩坑记录
踩坑记录
账号密码错误
未开启root登录
检查/etc/ssh/sshd_config
是否存在
PermitRootLogin yes
账户锁定
使用正确的账号密码登录,始终返回账号密码错误
检查root
账户是否被锁定 cat /etc/shadow | grep root
root:$6$88xxxxxxxxxxx:::
如果密码前有两个!!
(如root:!!$6$884zQxxx)则表示锁定
解除root
锁定passwd -u root
Unlocking password for user root.
passwd: Success
WinSCP无法连接
连接被关闭了
无法初始化SFTP协议。主机是SFTP服务器吗?
修改连接配置,将文件协议从SFTP
修改为SCP
PS:升级了两台服务器,只有一台有这个问题.这不是一个很好的解决方案,但是我没找到原因(大牛可以指正)
无法登录
在服务器中查看状态service sshd status
得到了下面得到Failed
记录
Apr 21 09:01:15 bogon sshd[542]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=x.x.x.x user=root
Apr 21 09:01:15 bogon sshd[542]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Apr 21 09:01:16 bogon sshd[542]: Failed password for root from x.x.x.x port 56012 ssh2
Apr 21 09:01:24 bogon sshd[542]: Accepted password for root from x.x.x.x port 56012 ssh2
以下解决方案摘自阿里云
检查这三个配置文件,是否限制了登录(如pam_succeed_if.so uid >= 1000
)
文件 | 功能说明 |
---|---|
/etc/pam.d/login | 控制台(管理终端)对应的配置文件。 |
/etc/pam.d/sshd | SSH远程登录对应的配置文件。 |
/etc/pam.d/system-auth | 系统全局配置文件 |
如果有限制,注释相关配置,或者修改策略
auth required pam_succeed_if.so uid <= 1000 # 修改策略
# auth required pam_succeed_if.so uid >= 1000 # 注释相关配置