在CentOS7升级OpenSSH至9.6
在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