Technical note
OpenSSH升级详细步骤
确定当前版本号
openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
即将升级为:
- OpenSSL: 1.0.2k-fips -> 1.1.1s(最新稳定版)
- OpenSSH: 7.4p1 -> 9.1p1(最新稳定版)
安装TelnetServer
OpenSSH升级有风险,当SSH服务无法正常启动时,需要通过Telnet远程登录并修复。临时开启Telnet,升版完成后再将期关闭。
直接通过本地yum源安装:
# 安装telnet-server
yum install telnet-server -y
# 启动服务
systemctl enable telnet.socket
systemctl start telnet.socket
# 测试能否正常连接(此时可以连接,但禁止登录)
telnet 192.168.23.11
由于PAM规则的限制,telnet默认不允许root用户远程登录,最简单且合法的方式是新建一个临时用户,登录后再su到root:
# 新建临时用户
useradd tmpuser
passwd tmpuser # 密码设为 yourpass
# 测试使用临时用户登录
telnet -l tmpuser 192.168.23.11 # 密码 yourpass
su -
下载源码
安全加固需要最新稳定版,而CentOS的yum源中版太旧,所以需要在OpenSSL与OpenSSH官网下载源码编译安装
官网地址:
下载链接:
wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.1p1.tar.gz
升级OpenSSL
# 查看版本号
openssl version
# 安装gcc相关依赖
yum install gcc gcc-c++ autoconf automake zlib zlib-devel pcre-devel -y
# 解压
tar -zxvf openssl-1.1.1s.tar.gz
cd openssl-1.1.1s
# 编译
export LANG=C
./config shared
make
# 备份
mv /usr/bin/openssl /usr/bin/openssl_old
# 安装
make install
# 创建软链接
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/
# 查看版本号
openssl version
升级OpenSSH
# 查看版本号
ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
# 安装相关依赖
yum install zlib-devel openssl-devel pam-devel -y
# 解压
tar -zxvf openssh-9.1p1.tar.gz
cd openssh-9.1p1
# 编译
./configure \
--prefix=/usr/ \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/lib64/ \
--with-zlib \
--with-pam \
--with-md5-password \
--with-ssl-engine \
--with-selinux
make
# 备份
mkdir /etc/ssh_old
mv /etc/ssh/* /etc/ssh_old/
# 安装
make install
# 查看新版本号
ssh -V
OpenSSH_9.1p1, OpenSSL 1.1.1s 1 Nov 2022
# 重新配置sshd_config
vi /etc/ssh/sshd_config
PermitRootLogin yes # 允许root登录
Port 2205 # 修改成之前的端口
# 移走以前的ssh服务, 防止与新的冲突
mv /usr/lib/systemd/system/sshd.service /etc/ssh_old/sshd.service
mv /usr/lib/systemd/system/sshd.socket /etc/ssh_old/sshd.socket
# 在解压包中拷贝一些文件
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
# 重启服务
systemctl daemon-reload
systemctl restart sshd
systemctl status sshd
# 测试登录
ssh root@192.168.23.11 -p2205
配置SSH互信
TiDB与DS所在的服务器,需要重新配置SSH互信。其它服务器不需要配置。
ssh-copy-id root@192.168.23.XX
关闭TelnetServer
确认OpenSSH升级成功后,关闭TelnetServer,并删除临时用户
# 关闭Telnet服务
systemctl disable telnet.socket
systemctl stop telnet.socket
systemctl status telnet.socket
# 删除临时用户
userdel tmpuser