1. 程式人生 > 其它 >原始碼包編譯安裝openssh9.0

原始碼包編譯安裝openssh9.0

部署環境:

 檢視安裝的openssh版本

 官網檢視openssh最新版本,最新為9.0

 第一步:下載openssh的原始碼包

 第二步:安裝編譯所需要的軟體(開發工具裡包含gcc編譯器等編譯所需的軟體)

 第三步:解壓下載的openssh原始碼包

第四步:進入解壓後的目錄,解壓後的目錄大小為9.7M

 第五步:閱讀INSTALL文件,發現需要有libcrypto這個庫才能安裝成功

第六步:嘗試編譯安裝,第一次check失敗是因為我們沒有安裝libcrypto這個庫

 由第五步得知libcrypto這個庫來自libressl和openssl,因此我們檢視我們安裝的opnessl

 安裝的包和沒有安裝的包進行對比,因此我們需要安裝openssl-devel.x86_64這個包

 安裝後我們再嘗試checking

 最後,當出現下面這些資訊表示checking成功

 然後執行make進行編譯,當checking成功後,make大概率會成功

 make成功後,進行make install編譯安裝,出現以下結果表示安裝成功

我們先禁用我們之前的openssh8.0服務

 我們從check那一步,可以找到我們的openssh9.0的安裝路徑,檢視我們的openssh9.0配置檔案

 從上圖可看出openssh9.0預設不支援root的ssh登入,因此我們需要開啟root的ssh登入並重啟openssh9.0對應的sshd服務

 修改完配置檔案後,我們發現一個問題,就是我們openssh9.0沒有對應systemd的service檔案,所以不能用systemctl restart sshd這條命令,用這條命令會重啟我們之前的openssh8.0服務,並不會重啟我們的9.0服務

因此我們要自定義我們的openssh9.0的service檔案,我們可以在8.0的基礎上修改

systemd unit檔案寫法

Unit部分

[Unit]通常是配置檔案的第一個section,用來定義Unit的元資料,以及配置與其他Unit的關係

Description:簡短描述

Documentation:文件地址

Requires:當前 Unit 依賴的其他 Unit,如果它們沒有執行,當前 Unit 會啟動失敗

Wants:與當前 Unit 配合的其他 Unit,如果它們沒有執行,當前 Unit 不會啟動失敗

BindsTo:與Requires類似,它指定的 Unit 如果退出,會導致當前 Unit 停止執行

Before:如果該欄位指定的 Unit 也要啟動,那麼必須在當前 Unit 之後啟動

After:如果該欄位指定的 Unit 也要啟動,那麼必須在當前 Unit 之前啟動

Conflicts:這裡指定的 Unit 不能與當前 Unit 同時執行 Condition...:當前 Unit 執行必須滿足的條件,否則不會執行

Assert...:當前 Unit 執行必須滿足的條件,否則會報啟動失敗

Install部分

[Install]通常是配置檔案的最後一個區塊,用來定義如何啟動,以及是否開機啟動。

WantedBy:它的值是一個或多個 Target,當前 Unit 啟用時(enable)符號連結會放 入/etc/systemd/system目錄下面以 Target 名 + .wants字尾構成的子目錄中 RequiredBy:它的值是一個或多個 Target,當前 Unit 啟用時,符號連結會放入/etc/systemd/system目錄下 面以 Target 名 + .required字尾構成的子目錄中 Alias:當前 Unit 可用於啟動的別名

Also:當前 Unit 啟用(enable)時,會被同時啟用的其他 Unit

Service部分

[Service]區塊用來Service的配置,只有Service型別的Unit才有這個區塊

Type:定義啟動時的程序行為。它有以下幾種值。

Type=simple:預設值,執行ExecStart指定的命令,啟動主程序

Type=forking:以 fork 方式從父程序建立子程序,建立後父程序會立即退出

Type=oneshot:一次性程序,Systemd 會等當前服務退出,再繼續往下執行

Type=dbus:當前服務通過D-Bus啟動

Type=notify:當前服務啟動完畢,會通知Systemd,再繼續往下執行

Type=idle:若有其他任務執行完畢,當前服務才會執行

ExecStart:啟動當前服務的命令

ExecStartPre:啟動當前服務之前執行的命令

ExecStartPost:啟動當前服務之後執行的命令

ExecReload:重啟當前服務時執行的命令

ExecStop:停止當前服務時執行的命令

ExecStopPost:停止當其服務之後執行的命令

RestartSec:自動重啟當前服務間隔的秒數

Restart:定義何種情況 Systemd 會自動重啟當前服務,可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog TimeoutSec:定義 Systemd 停止當前服務之前等待的秒數

Environment:指定環境變數

編寫systemd的service檔案

 過載service檔案並設定openssh9.0服務啟動和下次開機啟動

 到此,原始碼包升級安裝openssh9.0已經完成,如果想要回滾也很簡單,執行下面命令即可