SSH 升级避坑指南:从依赖到配置的深度优化

发布于:2025-07-03 ⋅ 阅读:(53) ⋅ 点赞:(0)

1. 下载依赖并上传服务器

本步骤旨在下载 SSH 升级所需的依赖包,并将其上传至服务器。通过yum命令,指定--downloadonly参数仅进行下载操作,--downloaddir参数设置下载路径为/ssh/install,执行以下命令:

yum install --downloadonly  --downloaddir=/ssh/install gcc pam-devel libselinux-devel zlib-devel openssl-devel

下载完成后,将获取到一系列.rpm格式的依赖包文件,如keyutils-libs-devel-1.5.8-3.el7.x86_64.rpmkrb5-devel-1.15.1-54.el7_9.x86_64.rpm等。请将这些文件上传至服务器对应目录,为后续安装做准备。

2. 下载 SSH 并上传服务器

从 OpenSSL 官方指定地址获取 SSH 安装包,链接为:https://www.openssl.org/source/old/3.0/openssl-3.0.0.tar.gz 。下载完成后,将该安装包上传至服务器。

3. 安装依赖

进入存放下载好的.rpm依赖包的目录,使用rpm命令进行安装。-ivhU参数组合分别表示安装、显示详细信息、处理依赖关系并升级,--nodeps参数忽略依赖关系检查,--force参数强制安装。执行命令:

rpm -ivhU * --nodeps --force 

需注意,忽略依赖关系检查可能存在风险,建议在确保系统环境适配的情况下使用。

4. 备份配置文件

为防止升级过程中出现问题导致配置丢失,对关键配置文件进行备份。执行以下命令:

cp /etc/ssh/sshd_config sshd_config.backup

cp /etc/pam.d/sshd sshd.backup

备份文件将保存在当前操作目录下,后续若有需要可恢复原配置。

5. 解压 SSH

使用tar命令解压上传至服务器的 SSH 安装包,xzvf参数分别表示解压、处理 gzip 压缩格式、显示详细信息、指定文件名。执行命令:

tar xzvf openssh.tar.gz

解压完成后,进入解压生成的目录:

cd openssh-9.0p1

6. 编译配置

openssh-9.0p1目录下,通过./configure命令进行编译配置。各参数含义如下:

  • --prefix=/usr:指定安装路径为/usr
  • --sysconfdir=/etc/ssh:设置配置文件目录为/etc/ssh
  • --with-md5-passwords:启用 MD5 密码验证。
  • --with-pam:启用 PAM 认证。
  • --with-zlib:使用 zlib 库。
  • --with-tcp-wrappers:启用 TCP Wrappers 访问控制。
  • --with-ssldir=/usr/local/ssl:指定 SSL 目录。
  • --without-hardening:不启用强化功能。

执行命令:

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-tcp-wrappers --with-ssldir=/usr/local/ssl --without-hardening

7. 编译安装

执行编译和安装操作,使用make命令进行编译,make install命令进行安装:

make && make install

错误信息处理

错误信息描述

在编译安装过程中,可能出现以下错误信息:

Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.

It is required that your private key are NOT accessible by others.

This private key will be ignored.

unable to load host key "/etc/ssh/ssh_host_ed25519_key": bad permissions

unable to load host key: /etc/ssh/ssh_host_ed25519_key

sshd: no hostkeys available

-- exiting.

make: [check-config] Error 1(ignored)

该错误表明主机密钥文件权限设置不当,需调整权限。

修改权限

使用chmod命令修改相关主机密钥文件权限为600,确保只有文件所有者可读写,执行以下命令:

chmod 600 /etc/ssh/ssh_host_rsa_key

chmod 600 /etc/ssh/ssh_host_ecdsa_key

chmod 600 /etc/ssh/ssh_host_ed25519_key

或使用一条命令同时修改多个文件权限:

chmod 600 /etc/ssh/ssh_host_rsa_key  /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key

验证

使用sshd -t命令验证配置文件语法是否正确,确保权限修改后配置无误。

复制配置文件

将指定目录下的sshd.init文件复制到/etc/init.d/目录,并赋予执行权限,命令如下:

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

修改确认配置

使用文本编辑器(如vi)打开/etc/ssh/sshd_config文件,进行以下配置修改:

vi /etc/ssh/sshd_config

PasswordAuthentication设置为yes,允许密码认证;PermitRootLogin设置为yes,允许 root 用户登录;同时注释掉以下三行内容:

#GSSAPIAuthentication yes

#GSSAPICleanupCredentials no

#Userpam yes

修改完成后保存文件。

加入开机启动

使用chkconfig命令将sshd服务添加到开机启动项,并设置为开机自动启动:

chkconfig --add sshd

chkconfig sshd on

8. 重启服务

使用systemctl命令重启sshd服务,使升级后的配置生效:

systemctl restart sshd

查看版本

使用ssh -V命令查看当前 SSH 版本,确认升级是否成功。

启动状态问题处理

问题描述

在启动sshd服务时,可能出现类似以下情况:

[4ajr@105 ~]$ systemctl status sshd

sshd.service - OpenSSH server daemon

Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)

Active: activating (start) since Thu 2022-07-21 11:58:09 CST;1min 11s ago

Docs: man:sshd(8)

man:sshd_config(5)

Main PID: 98422 (sshd)

Tasks:8

Memory: 4.3M

CGroup: /system.slice/sshd.service

-98422 sshd: /usr/sbin/sshd -D [listener]0 of 10-100 startups

-98621 sshd: 4ajr [priv]

-98623 sshd:4ajr@pts/2

-98625 sshd: 4ajr [priv]

-98627 sshd: 4ajr@pts/0

-98628 -bash

-98647 -bash

-98830 systemctl status sshd

Jul 21 11:58:09 105 systemd[1]: starting OpenssH server daemon...

Jul 21 11:58:09 105 sshd[98422]: server listening on 0.0.0.0 port 22.

Jul 21 11:58:09 105 sshd[98422]: server listening on ::port 22.

Jul 21 11:58:36 105 sshd[98621]: Accepted password for 4ajr from 172.30.216.215 port 43872 ssh2

Jul 21 11:58:36 105 sshd[98625]: Accepted password for 4air from 172.30.216.215 port 43874 ssh2

该问题是由于/usr/lib/systemd/system/sshd.servicesystemd不兼容导致。

处理办法

执行以下操作解决问题:

  1. 将不兼容的服务文件移动到其他目录:

mv /usr/lib/systemd/system/sshd.service  /home/aaa/

  1. 重新加载systemd守护进程:

systemctl daemon-reload

  1. 使用sshd -t命令检查配置是否存在问题。
  2. 若配置无误,重启sshd服务:

systemctl restart sshd

安全漏洞修补相关操作

禁用 scp 命令

在某些场景下,为修补安全漏洞,可禁用scp命令(此操作不影响ssh正常使用)。通过将/usr/bin/scp文件重命名为/usr/bin/scp.bak实现禁用,执行命令:

mv /usr/bin/scp /usr/bin/scp.bak

上述操作完成后,SSH 升级及相关安全配置调整工作基本结束。若在操作过程中遇到其他问题,可进一步排查系统日志或寻求专业技术支持。

这份优化后的指南更清晰全面。你可以说说对内容的看法,比如是否要增加特定系统下的注意事项,或补充更多操作细节。