在CentOS7升级OpenSSH至9.6

14

在CentOS7升级OpenSSH至9.6

1. 安装依赖项

sudo yum update
sudo yum install -y gcc make zlib-devel openssl-devel pam-devel

2. 下载OpenSSH9.6

cd /usr/local/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
tar -xzvf openssh-9.6p1.tar.gz
cd openssh-9.6p1

由于OpenSSH9.6需要依赖OpenSSL1.1.1+,所以解下来我们升级OpenSSL1.1.1

3. 安装OpenSSL1.1.1

因为升级OpenSSL是敏感操作,如果我们机器上已经在运行业务了,我们选择安装 OpenSSL 到一个独立目录( /usr/local/ssl)以此避免覆盖掉系统默认的OpenSSL

因为我们是centos7,老旧的仓库里面没有1.1.1版本的OpenSSL所以不能使用yum直接升级

# 下载OpenSSL1.1.1源码
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xzvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

# 配置编译选项
./config --prefix=/usr/local/ssl shared zlib

# 编译并且安装
make
sudo make install

# 配置动态链接库路径
echo "/usr/local/ssl/lib" | sudo tee /etc/ld.so.conf.d/openssl-1.1.1.conf
sudo ldconfig

# 验证
/usr/local/ssl/bin/openssl version

4. 继续编译OpenSSH

cd /usr/local/src/openssh-9.6p1
# 指定刚才的ssl路径
./configure \
    --prefix=/usr \
    --sysconfdir=/etc/ssh \
    --with-ssl-dir=/usr/local/ssl \
    --with-pam \
    --with-privsep-path=/var/lib/sshd \
    --with-privsep-user=sshd

# 编译并且安装
make
sudo make install

5. 备份以及更新

备份现有的ssh密钥以及配置

sudo cp -rp /etc/ssh /etc/ssh_backup_$(date +%Y%m%d%H%M%S)

更新服务端配置文件sshd_config

# 查找并且拷贝安装的OpenSSH9.6的sshd_config配置文件
sudo cp /usr/local/src/openssh-9.6p1/sshd_config /etc/ssh/sshd_config.new

比较合并配置,使用diff工具比较新旧配置,将旧配置迁移,下面列出一些常用的配置修改,一般都要配置

PermitRootLogin yes
PasswordAuthentication yes

测试新配置中是否含有语法问题,如果没有输出报错,说明正常

sudo /usr/sbin/sshd -t -f /etc/ssh/sshd_config.new

没问题后激活新配置

sudo mv /etc/ssh/sshd_config.new /etc/ssh/sshd_config
sudo chmod 600 /etc/ssh/sshd_config
sudo ssh-keygen -A

6. 检查并且重启systemctl管理的sshd

# 查找新的sshd在哪里
which sshd

检查Systemd 服务单元文件

# 检查这个文件配置
sudo vi /lib/systemd/system/sshd.service

确保找到 [Service] 段落中的 ExecStart 行,确保它指向您新安装的 sshd 可执行文件的正确路径。例如: ExecStart=/usr/sbin/sshd -D 如果您的新 sshd 安装在 /usr/local/sbin/sshd,则需要改为: ExecStart=/usr/local/sbin/sshd -D

# reload
sudo systemctl daemon-reload

# 重启ssh
# 首先设置nohup,确保停止之后能自己启动
sudo nohup systemctl start sshd &

# 停止sshd
sudo systemctl stop sshd

# 等待启动后,重新🔗连接终端,检查
sudo systemctl status sshd