dpkg: error processing package openssh-server (–configure): installed openssh-server package post-installation script subprocess returned error exit status 10

在升級 openssh-server 時遇到錯誤.

解法1

第1步:現將info資料夾更名

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bak

第2步:再新建一個新的 info文件

sudo mkdir /var/lib/dpkg/info

第3步:更新

sudo apt-get update

第4步:重新安裝有問題的依賴包(不知道的話,可以都執行一遍)

sudo apt-get -f install openssh-server
sudo apt-get -f install ssh

第5步:調整安裝依賴后,把新的東西移動到備份資料夾 info.bak

sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info.bak

第6步:把自己新建的 info 資料夾刪掉

sudo rm -rf /var/lib/dpkg/info

第7步:把備份的 info 資料夾重新改回名字

sudo mv /var/lib/dpkg/info.bak /var/lib/dpkg/info

解法2

先在其他界面, 例如: lish console, web console 之類, 移除 openssh-server:

sudo apt remove --purge openssh-server
sudo apt update
sudo apt install openssh-server

安裝好之後, 先把預設值搬到 /etc/ssh/sshd_config

備份現有的配置檔案:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

然後,複製預設配置檔案:

sudo cp /usr/share/openssh/sshd_config /etc/ssh/sshd_config

重新啟動 SSH 服務:

sudo systemctl restart ssh.service

在 Ubuntu 系統中啟用 SSH 伺服器(sshd)非常簡單。以下是詳細步驟:

1. 安裝 OpenSSH 伺服器:

  • 如果您的系統尚未安裝 OpenSSH 伺服器,請執行以下指令:

Bash

sudo apt update
sudo apt install openssh-server
  • sudo apt update:更新套件列表。
  • sudo apt install openssh-server:安裝 OpenSSH 伺服器。

2. 啟動 SSH 服務:

  • 安裝完成後,SSH 服務通常會自動啟動。
  • 您可以使用以下指令確認服務狀態:

Bash

sudo systemctl status ssh.service
  • 如果服務未啟動,請執行以下指令啟動:

Bash

sudo systemctl start ssh.service

3. 設定開機自動啟動:

  • 若要讓 SSH 服務在系統開機時自動啟動,請執行以下指令:

Bash

sudo systemctl enable ssh.service

4. 防火牆設定 (如果啟用):

  • 如果您的系統啟用了防火牆(例如 ufw),請確保允許 SSH 連線。
  • 預設 SSH 端口為 22。執行以下指令允許 SSH 連線:

Bash

sudo ufw allow 22
  • 如果更改了 SSH 端口,請將 22 替換為您的端口號。
  • 要啟用ufw防火牆,請輸入指令sudo ufw enable

5. 檢查 SSH 服務:

  • 再次執行以下指令,確認 SSH 服務已成功啟動:

Bash

sudo systemctl status ssh.service

6. SSH 配置 (可選):

  • 您可以編輯 /etc/ssh/sshd_config 檔案,以自訂 SSH 伺服器設定。
  • 例如,您可以更改 SSH 端口、禁用密碼驗證或限制允許連線的使用者。
  • 編輯完成後,重新啟動 SSH 服務:

Bash

sudo systemctl restart ssh.service

重要提示:

  • 為了安全起見,強烈建議使用 SSH 金鑰驗證,而不是密碼驗證。
  • 定期更新系統和軟體,以修補安全漏洞。
  • 使用fail2ban來阻擋嘗試暴力破解ssh的使用者。
  • 更改ssh port, 預設為22 port。

好的,這個輸出結果提供了更詳細的錯誤資訊,讓我們更清楚地了解 SSH 服務無法啟動的原因。

錯誤訊息分析:

  • Active: failed (Result: exit-code): 再次確認 SSH 服務啟動失敗。
  • Control process exited, code=exited, status=255/EXCEPTION:
    • 這是關鍵錯誤。
    • status=255/EXCEPTION 表示 SSH 伺服器(sshd)在啟動時遇到了未知的異常。
    • 通常,status=255 表示一個通用的錯誤,可能由多種原因引起。
  • Failed to start OpenBSD Secure Shell server.: 確認 SSH 服務無法啟動。
  • ssh.service: Start request repeated too quickly.: 表示systemd嘗試啟動ssh服務,但是因為錯誤,啟動太快,所以被systemd阻擋。

可能的原因和解決方案:

  1. 配置檔案錯誤 (/etc/ssh/sshd_config):
    • 雖然之前的錯誤是語法錯誤(status=1),但現在的 status=255 可能表示更深層次的配置問題。
    • 再次仔細檢查 /etc/ssh/sshd_config 檔案,特別是以下設定:
      • Port:確保端口號有效且未被其他服務佔用。
      • ListenAddress:確保監聽地址正確。
      • HostKey:確保主機金鑰檔案存在且權限正確。
      • PermitRootLoginPasswordAuthenticationPubkeyAuthentication:確保驗證設定正確。
    • 使用sudo sshd -t來測試設定檔案。
  2. linode.conf 配置問題:
    • Drop-In: /etc/systemd/system/ssh.service.d/linode.conf 表示 Linode 的自訂配置可能會引起衝突。
    • 檢查 linode.conf 檔案的內容,看看是否有任何可能導致衝突的設定。
    • 如果懷疑是 linode.conf 導致問題,可以嘗試暫時移除或重新命名該檔案,然後重新啟動 SSH 服務。
  3. 主機金鑰問題:
    • sshd 可能無法讀取或生成主機金鑰。
    • 檢查 /etc/ssh 目錄的權限:ls -ld /etc/ssh
    • 檢查主機金鑰檔案的權限:ls -l /etc/ssh/ssh_host_*
    • 嘗試重新生成主機金鑰:
      • sudo rm /etc/ssh/ssh_host_*
      • sudo dpkg-reconfigure openssh-server
  4. 系統資源問題:
    • 雖然不太可能,但系統資源不足(例如記憶體或磁碟空間)也可能導致 sshd 啟動失敗。
    • 檢查系統資源使用情況:free -hdf -h
  5. 日誌檔案:
    • 檢查/var/log/auth.log/var/log/syslog/var/log/ssh.log檔案,看看是否有更詳細的錯誤訊息。

解決步驟:

  1. 檢查 /etc/ssh/sshd_configlinode.conf 檔案。
  2. 檢查主機金鑰檔案和目錄的權限。
  3. 嘗試重新生成主機金鑰。
  4. 檢查系統日誌檔案。

請提供您檢查後的結果,以及相關日誌檔案的內容,以便我提供更精確的協助。


這個錯誤訊息 “Privilege separation user sshd does not exist” 表示 SSH 伺服器(sshd)在啟動時,需要一個名為 sshd 的特定使用者帳號,用於權限隔離(privilege separation)。這個使用者帳號在您的系統中不存在。

權限隔離 (Privilege Separation):

  • 權限隔離是一種安全機制,sshd 會在啟動時使用一個低權限的使用者帳號(sshd)來執行某些操作,以降低潛在的安全風險。
  • 如果 sshd 遇到安全漏洞,攻擊者只能獲得 sshd 使用者帳號的權限,而無法獲得 root 權限。

解決方案:

您需要建立 sshd 使用者帳號。以下是步驟:

  1. 建立 sshd 使用者帳號:
    • 使用以下指令建立 sshd 系統使用者帳號:
    Bashsudo adduser --system --group --no-create-home --home /run/sshd --shell /usr/sbin/nologin sshd
    • sudo adduser:以 root 權限執行 adduser 指令。
    • --system:建立系統使用者帳號。
    • --group:建立同名群組。
    • --no-create-home:不建立家目錄。
    • --home /run/sshd:設定家目錄為 /run/sshd
    • --shell /usr/sbin/nologin:設定 shell 為 /usr/sbin/nologin,禁止使用者登入。
    • sshd:使用者名稱。
  2. 重新測試 SSH 配置:
    • 建立 sshd 使用者帳號後,再次執行以下指令測試 SSH 配置:
    Bashsudo sshd -t
    • 如果配置正確,此指令應該不會有任何輸出。
  3. 重新啟動 SSH 服務:
    • 如果配置測試成功,重新啟動 SSH 服務:
    Bashsudo systemctl restart ssh.service
  4. 檢查 SSH 服務狀態:
    • 確認 SSH 服務已成功啟動:
    Bashsudo systemctl status ssh.service

注意事項:

  • sshd 使用者帳號是 SSH 伺服器正常運作所必需的。
  • 請確保您的系統中存在 sshd 使用者帳號。
  • 如果錯誤仍然存在,請再次檢查 /etc/ssh/sshd_config 檔案的配置。
  • 檢查日誌檔案。

好的,您執行了 sudo adduser 指令,但遇到了兩個問題:

  1. “Warning: The home dir /run/sshd you specified can’t be accessed: No such file or directory”: 即使您使用了 --no-create-home 選項,adduser 仍然會檢查 /run/sshd 目錄是否存在。
  2. “Missing privilege separation directory: /run/sshd”: sshd 需要 /run/sshd 目錄進行權限隔離。

解決方案:

您需要手動建立 /run/sshd 目錄,並確保其權限正確。

步驟:

  1. 建立 /run/sshd 目錄:
    • 使用以下指令建立目錄:
    sudo mkdir -p /run/sshd
    • -p 選項用於創建父目錄(如果不存在)。
  2. 設定目錄權限:
    • 確保 sshd 使用者帳號對該目錄具有正確的權限:
    sudo chown sshd:sshd /run/sshd sudo chmod 700 /run/sshd
    • chown 指令將目錄的所有者和群組設定為 sshd
    • chmod 700 指令將目錄的權限設定為只有所有者可以讀取、寫入和執行。
  3. 重新測試 SSH 配置:
    • 再次執行以下指令測試 SSH 配置:
    sudo sshd -t
    • 如果配置正確,此指令應該不會有任何輸出。
  4. 重新啟動 SSH 服務:
    • 如果配置測試成功,重新啟動 SSH 服務:

    sudo systemctl restart ssh.service
  5. 檢查 SSH 服務狀態:
    • 確認 SSH 服務已成功啟動:

    sudo systemctl status ssh.service

重要提示:

  • /run 目錄是一個臨時檔案系統,其中的檔案在系統重新啟動後會被刪除。
  • 因此,每次系統重新啟動後,您可能需要重新建立 /run/sshd 目錄。
  • 為了自動化此過程,您可以將建立 /run/sshd 目錄的指令添加到系統啟動腳本中,例如 /etc/rc.local 或 systemd unit file。

請按照上述步驟操作,並提供執行結果。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *