原始碼包編譯安裝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已經完成,如果想要回滾也很簡單,執行下面命令即可