在升級 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阻擋。
可能的原因和解決方案:
- 配置檔案錯誤 (
/etc/ssh/sshd_config
):- 雖然之前的錯誤是語法錯誤(
status=1
),但現在的status=255
可能表示更深層次的配置問題。 - 再次仔細檢查
/etc/ssh/sshd_config
檔案,特別是以下設定:Port
:確保端口號有效且未被其他服務佔用。ListenAddress
:確保監聽地址正確。HostKey
:確保主機金鑰檔案存在且權限正確。PermitRootLogin
、PasswordAuthentication
、PubkeyAuthentication
:確保驗證設定正確。
- 使用
sudo sshd -t
來測試設定檔案。
- 雖然之前的錯誤是語法錯誤(
linode.conf
配置問題:Drop-In: /etc/systemd/system/ssh.service.d/linode.conf
表示 Linode 的自訂配置可能會引起衝突。- 檢查
linode.conf
檔案的內容,看看是否有任何可能導致衝突的設定。 - 如果懷疑是
linode.conf
導致問題,可以嘗試暫時移除或重新命名該檔案,然後重新啟動 SSH 服務。
- 主機金鑰問題:
sshd
可能無法讀取或生成主機金鑰。- 檢查
/etc/ssh
目錄的權限:ls -ld /etc/ssh
- 檢查主機金鑰檔案的權限:
ls -l /etc/ssh/ssh_host_*
- 嘗試重新生成主機金鑰:
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server
- 系統資源問題:
- 雖然不太可能,但系統資源不足(例如記憶體或磁碟空間)也可能導致
sshd
啟動失敗。 - 檢查系統資源使用情況:
free -h
、df -h
- 雖然不太可能,但系統資源不足(例如記憶體或磁碟空間)也可能導致
- 日誌檔案:
- 檢查
/var/log/auth.log
,/var/log/syslog
,/var/log/ssh.log
檔案,看看是否有更詳細的錯誤訊息。
- 檢查
解決步驟:
- 檢查
/etc/ssh/sshd_config
和linode.conf
檔案。 - 檢查主機金鑰檔案和目錄的權限。
- 嘗試重新生成主機金鑰。
- 檢查系統日誌檔案。
請提供您檢查後的結果,以及相關日誌檔案的內容,以便我提供更精確的協助。
這個錯誤訊息 “Privilege separation user sshd does not exist” 表示 SSH 伺服器(sshd
)在啟動時,需要一個名為 sshd
的特定使用者帳號,用於權限隔離(privilege separation)。這個使用者帳號在您的系統中不存在。
權限隔離 (Privilege Separation):
- 權限隔離是一種安全機制,
sshd
會在啟動時使用一個低權限的使用者帳號(sshd
)來執行某些操作,以降低潛在的安全風險。 - 如果
sshd
遇到安全漏洞,攻擊者只能獲得sshd
使用者帳號的權限,而無法獲得 root 權限。
解決方案:
您需要建立 sshd
使用者帳號。以下是步驟:
- 建立
sshd
使用者帳號:- 使用以下指令建立
sshd
系統使用者帳號:
sudo 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
:使用者名稱。
- 使用以下指令建立
- 重新測試 SSH 配置:
- 建立
sshd
使用者帳號後,再次執行以下指令測試 SSH 配置:
sudo sshd -t
- 如果配置正確,此指令應該不會有任何輸出。
- 建立
- 重新啟動 SSH 服務:
- 如果配置測試成功,重新啟動 SSH 服務:
sudo systemctl restart ssh.service
- 檢查 SSH 服務狀態:
- 確認 SSH 服務已成功啟動:
sudo systemctl status ssh.service
注意事項:
sshd
使用者帳號是 SSH 伺服器正常運作所必需的。- 請確保您的系統中存在
sshd
使用者帳號。 - 如果錯誤仍然存在,請再次檢查
/etc/ssh/sshd_config
檔案的配置。 - 檢查日誌檔案。
好的,您執行了 sudo adduser
指令,但遇到了兩個問題:
- “Warning: The home dir /run/sshd you specified can’t be accessed: No such file or directory”: 即使您使用了
--no-create-home
選項,adduser
仍然會檢查/run/sshd
目錄是否存在。 - “Missing privilege separation directory: /run/sshd”:
sshd
需要/run/sshd
目錄進行權限隔離。
解決方案:
您需要手動建立 /run/sshd
目錄,並確保其權限正確。
步驟:
- 建立
/run/sshd
目錄:- 使用以下指令建立目錄:
sudo mkdir -p /run/sshd
-p
選項用於創建父目錄(如果不存在)。
- 設定目錄權限:
- 確保
sshd
使用者帳號對該目錄具有正確的權限:
sudo chown sshd:sshd /run/sshd sudo chmod 700 /run/sshd
chown
指令將目錄的所有者和群組設定為sshd
。chmod 700
指令將目錄的權限設定為只有所有者可以讀取、寫入和執行。
- 確保
- 重新測試 SSH 配置:
- 再次執行以下指令測試 SSH 配置:
sudo sshd -t
- 如果配置正確,此指令應該不會有任何輸出。
- 重新啟動 SSH 服務:
- 如果配置測試成功,重新啟動 SSH 服務:
sudo systemctl restart ssh.service
- 檢查 SSH 服務狀態:
- 確認 SSH 服務已成功啟動:
sudo systemctl status ssh.service
重要提示:
/run
目錄是一個臨時檔案系統,其中的檔案在系統重新啟動後會被刪除。- 因此,每次系統重新啟動後,您可能需要重新建立
/run/sshd
目錄。 - 為了自動化此過程,您可以將建立
/run/sshd
目錄的指令添加到系統啟動腳本中,例如/etc/rc.local
或 systemd unit file。
請按照上述步驟操作,並提供執行結果。