Ubuntu16.04升級openssh-9.8p1

xjournal發表於2024-07-21

7月1日OpenSSH官方釋出安全更新,忙著處理的同時記錄一下升級過程。

系統環境

root@NServer:~# cat /proc/version
Linux version 3.4.113-sun8i (root@test) (gcc version 5.5.0 (Linaro GCC 5.5-2017.10) ) #40 SMP PREEMPT Tue Mar 16 14:24:14 CST 2021
root@NServer:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.7 LTS
Release:	16.04
Codename:	xenial

安裝包

zlib-1.3.1.tar.gz         # https://www.zlib.net/
openssl-1.1.1w.tar.gz     # https://www.openssl.org/source/old/1.1.1/index.html
openssh-9.8p1.tar.gz      # https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

升級步驟

升級順序

openssl -> zlib -> openssh

安裝openssl

tar zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl shared
make 
make install
#建立軟連線
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/
#檢視openssl版本,能正常輸出版本號表示成功
/usr/local/openssl/bin/openssl version

Ubuntu16.04升級openssh-9.8p1

安裝zlib

tar zxvf zlib-1.3.1.tar.gz
cd zlib-1.3.1
./configure --prefix=/usr/local/zlib
make
make install

安裝openssh

#先解除安裝原openssh,解除安裝後切記不要斷開ssh連線
sudo apt purge --remove "openssh*"
rm -rf /usr/local/openssh
#安裝openssh
tar zxvf openssh-9.8p1.tar.gz
cd openssh-9.8p1
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --without-openssl-header-check 
make 
make install

配置openssh

重啟sshd服務會提示“Privilege separation user sshd does not exist”需要再/etc/passwd最後加入一行sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

echo 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin' >> /etc/passwd

註冊為服務,建立sshd.service檔案

vim /usr/lib/systemd/system/sshd.service

寫入內容:

[Unit]
Description=OpenSSH serve
Documentation=man:sshd(8) man:sshd_config(5)
#After=network.target sshd-keygen.service
#Wants=sshd-keygen.service
After=network.target

[Service]
#Type=notify
#EnvironmentFile=/etc/sysconfig/sshd
#ExecStart=/usr/local/openssh/sbin/sshd -D $OPTIONS
ExecStart=/usr/local/openssh/sbin/sshd
#ExecReload=/bin/kill -HUP $MAINPID
#KillMode=process
#Restart=on-failure
#RestartSec=42s

[Install]
WantedBy=multi-user.target

過載Systemctl,並設定為自啟動

systemctl daemon-reload
systemctl restart sshd

這裡會啟動失敗,使用systemctl status sshd檢視失敗原因,是因為原ssh服務佔用了22埠,所以這裡先把新的ssh服務修改成8022

vim /etc/ssh/sshd_config

把Port和ListenAddress 0.0.0.0前面的#號去掉,並把Port 後面的22改成8022如下圖所示:

Ubuntu16.04升級openssh-9.8p1

同時需要將8022加入防火牆,否則ssh無法連線

ufw allow 8022

改完後儲存,繼續重啟sshd

systemctl restart sshd

沒報錯後,檢視sshd狀態,Active: active (running) 表示執行中,此時可以使用putty等工具透過8022埠登入伺服器。

systemctl status sshd

加入開機啟動

systemctl enable sshd

如果提示“update-rc.d: error: sshd Default-Start contains no runlevels, aborting.”,需要修改sshd

vim /etc/init.d/sshd

在#!/bin/bash 下面第二行插入

### BEGIN INIT INFO
# Provides:          sshd
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start sshd daemon at boot time
# Description:       Start sshd daemon at boot time
### END INIT INFO

如下圖所示:

Ubuntu16.04升級openssh-9.8p1

儲存後重新設定開機自啟:

systemctl enable sshd

成功後如下圖所示:

Ubuntu16.04升級openssh-9.8p1

在/etc/ssh/sshd_config末尾追加三行資料

echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PubkeyAuthentication yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config

重啟伺服器:

reboot

#檢視版本:

ssh -V

Ubuntu16.04升級openssh-9.8p1

至此升級成功!

附:記得將ssh埠改回22。

相關文章