Ssh

通過 ssh 執行的自動執行的 cron 作業的密鑰是否應該沒有密碼?

  • March 17, 2019

我正在閱讀一篇Master Linux Now 2013名為call 的文章OpenSSH: Easy Logins,它用於ssh-agent允許您為密鑰輸入一次密碼,然後您可以在 ssh-agent 執行時自由連接到遠端機器而無需再次輸入。

我首先被這篇文章吸引的原因,除了不必重新輸入我的密碼一百萬次;這樣我就可以通過 ssh 從遠端機器上的 cron 呼叫 rsync 從 / 到遠端機器進行無人值守的備份;

我看到另一篇文章,有人只是跳過了密碼,以便 cron 可以輕鬆地使用密鑰登錄,感覺不對,但在實踐中可以這樣做嗎?我的意思是,如果有人掌握了該密鑰文件,他們將能夠對正在備份的機器造成嚴重破壞。

在我看來,確保使用者在重新啟動時登錄並讓他們輸入一次密碼會更安全,當他們登錄以使代理執行時,然後等待 cron 作業在螢幕鎖定的情況下執行;但我可能在這裡遺漏了一些東西,比如關於執行 cron 作業的使用者或使用者類型。

限制key可以呼叫的命令

如果 SSH 密鑰將用於任何類型的自動化或無人值守的任務,您應該限制它能夠在遠端機器上執行的命令,無論您對如何以及在何處儲存密鑰做出何種決定。

~/.ssh/authorized_keys

command="/usr/sbin/the-backup-daemon" ssh-rsa AAAAAAAAAAAABBBBBXXXXXX.....

那樣的話,至少鑰匙不應該像你說的那樣造成嚴重破壞。它只能訪問它應該訪問的內容,等等……它很可能仍然會造成損害,但它對遠端系統的訪問權限應該低於完全訪問權限。

您還可以限制允許使用該密鑰進行連接的 IP 地址,並禁用一系列其他 SSH 功能,例如使用該密鑰的連接的埠轉發:

from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/sbin/the-backup-daemon" ssh-rsa AAAAAAAAAAAAXXXXXX.....

所有這些都必須在~/.ssh/authorized_keys.

保護密鑰

這取決於您的威脅模型是什麼。

如果您擔心密鑰在“冷”時被盜,例如,保存密鑰的電腦被盜,那麼您不會希望在沒有密碼的情況下將其保存在該位置。

可以在伺服器啟動後手動啟動一種後台 SSH 代理,將密鑰添加到該代理,並記錄該代理$SSH_AUTH_SOCK以供 cron 作業將來使用,但老實說,這聽起來麻煩多於其價值。您不妨將未加密的密鑰儲存在tmpfs文件系統中,並讓 cron 作業從那裡訪問它。無論哪種方式,密鑰都只存在於記憶體中(如果您沒有交換或加密交換)。當然你應該chownchmod文件,這樣只有目標使用者才能訪問它。

再說一次,如果您擔心這一點,您可能已經使用加密的根文件系統和交換(例如 luks)設置了這台電腦,因此您可能不需要擔心它。

如果您擔心密鑰在“熱”(載入到記憶體中)時被盜,那麼您無能為力。如果 cron 作業可以訪問它,那麼其他已經設法獲得相同訪問權限的東西也可以。就是這樣,還是放棄無人值守作業執行的便利。

總之,您應該將備份伺服器視為非常特權的系統,因為它必然會被授予對其備份的所有電腦的完整文件系統的只讀訪問權限。例如,您的備份伺服器不應從 Internet 訪問。

引用自:https://unix.stackexchange.com/questions/214283