CentOS 7 升级 SSHD

1. 安装包下载

wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz

切记:本教程【只】成功安装了 openssh v9.7p1,其它版本自己测试

2. 安装GCC和EPEL

yum -y install epel-release
yum -y group install "Development Tools"

3. 安装 EPEL 的 SSL 库(成功关键)

yum -y install openssl11 openssl11-devel openssl11-libs

4. 修改防火墙 Allow 更多的端口

目的:绑定 SSH 的备用端口 1022以防意外时,可以通过 VPN 连接 1022

sudo vim /etc/sysconfig/iptables
-A INPUT -p tcp -m tcp --dport 1022 -j ACCEPT
sudo systemctl restart iptables.service

5. 安装SSH的依赖

sudo yum -y install zlib-devel pam-devel libselinux-devel

6. 编译OpenSSH

tar -xzf openssh-9.7p1.tar.gz 
cd openssh-9.7p1/
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
./configure --prefix=/usr/local --sysconfdir=/usr/local/etc/ssh \
--with-ssl-engine --with-pam --with-selinux
make
make install
/usr/local/sbin/sshd -V
    OpenSSH_9.7p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

7. 测试新版 SSHD

目的:绑定 SSH 的备用端口 1022以防意外时,可以通过 VPN 连接 1022

cat /etc/ssh/sshd_config > /usr/local/etc/ssh/sshd_config
vim /usr/local/etc/ssh/sshd_config

  1. 修改 Port 22Port 1022
  2. 修改 HostKey ...HostKey /usr/local/etc/ssh/ssh_host_rsa_key
  3. 修改 Subsystem sftp ...Subsystem sftp /usr/local/libexec/sftp-server
  4. 删除所有以 GSSAPI开头的命令配置(9.7 编译时未启用 GSSAPI,因为没成功过)

最终修改如下:

Port 1022
AddressFamily inet
ListenAddress 0.0.0.0
Protocol 2
HostKey /usr/local/etc/ssh/ssh_host_rsa_key
SyslogFacility AUTH
LogLevel INFO
PrintMotd no
PrintLastLog yes
Banner none
UseDNS no
AcceptEnv XMODIFIERS LANG LC_*
MaxStartups 2:30:10
LoginGraceTime 120
TCPKeepAlive yes
ClientAliveInterval 180
ClientAliveCountMax 5
PermitRootLogin no
PermitEmptyPasswords no
UsePAM yes
PasswordAuthentication yes
ChallengeResponseAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 /etc/ssh/authorized_keys
StrictModes yes
IgnoreRhosts yes
HostbasedAuthentication no
AllowTcpForwarding yes
AllowAgentForwarding yes
X11Forwarding yes
X11DisplayOffset 10
Subsystem sftp /usr/local/libexec/sftp-server

一定记得使用绝对路径的 SSHD 测试配置文件:

/usr/local/sbin/sshd -t
/usr/local/sbin/ssh localhost

8. Copy 旧版本 SSHD 的 2 个 Systemd Unit 文件

cp -a /etc/sysconfig/sshd /usr/local/etc/ssh/
cp -a /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd-97p1.service

9. 最终修改如下

cat > /usr/lib/systemd/system/sshd-97p1.service << 'EOF'
[Unit]
Description=OpenSSH 9.7p1 server daemon
After=network.target
[Service]
Type=simple
EnvironmentFile=/usr/local/etc/ssh/sshd
ExecStart=/usr/local/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
EOF

然后:

mkdir -p /var/empty/
systemctl daemon-reload
systemctl enable sshd-97p1.service
systemctl start sshd-97p1.service
systemctl status sshd-97p1.service
netstat -tpnl | grep 1022

10. 通过 VPN 或局域网确保 1022 可连接

ssh -p 1022 kkt@x.x.x.x

切记:成功了才可以执行下面的步骤!

11. 互换旧版 SSHD 和 新版本 SSHD 绑定的端口

vim /etc/ssh/sshd_config
Port 1022
vim /usr/local/etc/ssh/sshd_config
Port 22
Port 20801

然后,以下 4 行命令【全部一起】粘贴到控制台执行:

systemctl stop sshd-97p1.service ; systemctl restart sshd.service ; systemctl start sshd-97p1.service
systemctl status sshd-97p1.service
systemctl status sshd.service
netstat -tpnl | grep 22

12. 通过 VPN 或局域网确保 1022 和 22 都可连接

ssh -p 22 kkt@x.x.x.x
ssh -p 1022 kkt@x.x.x.x

切记:成功了才可以执行下面的步骤

13. 修改防火墙 1022 只允许 JMS 才能连接

sudo vim /etc/sysconfig/iptables
-A INPUT -s 122.112.13X.X/32 -j ACCEPT
# 删除下面这一行:
#-A INPUT -p tcp -m tcp --dport 1022 -j ACCEPT
sudo systemctl restart iptables.service

大功告成!