
考慮以下場景:
我以「common」使用者登入 serverA。關鍵是關於常見的 用戶是一群人可以訪問它 - 它在設計上不受限制且不安全。
比方說,我定期需要從該用戶/伺服器登入伺服器B作為用戶安全的- 即我需要 scp 擁有的文件安全性@serverB。
雖然我擁有完全存取和控制權安全的用戶,我當然不想加入常見的的公鑰到可信密鑰安全的用戶 - 我不希望任何人可以登入常見的能夠登入為安全的以及。
我也不想輸入安全的每小時輸入 5 次密碼。理想情況下,我想輸入一次,讓某個代理神奇地記住它 - 但僅限於此登入會話 - 並且比我從此會話連接的任何時候都使用它,直到超時到期。kinit
實際上,沒什麼不同。
有什麼可以實現這個目標嗎?
答案1
如果您在中間伺服器上有共用使用者並且該使用者俱有 shell 存取權限,那麼事情就不那麼容易了,因為預設情況下每個其他會話都可以存取幾乎所有內容。
當然,現代核心中有一些方法。
要么可以有一個工具,利用會話(進程/線程)密鑰環將私有資料儲存在內核中,要么可以使系統足夠安全,以禁止同一用戶的不同進程相互訪問,以便程式可以保存身份驗證資訊也在正常使用者空間記憶體中,免受其他會話的影響。無論如何,兩者都必須根據一些適用於基本用途的 PID/SID 資訊來識別進行身份驗證的請求。最後,您需要一個守護進程來為您進行會話設定或將儲存的密碼傳遞給您的進程,以便您可以將其與 sshpass 工具等一起使用。
另一種方法是利用命名空間並掛載私有 tmpfs 或 tmpdir(雖然 tmpfs 比 tmpdir 受到更好的保護,或至少不太容易從 root 使用者存取)。
您可以在單獨的連接埠上使用 sshd,並使用包裝器為該使用者設定命名空間環境,或者在現代系統上最容易,至少您可以使用 pam 和 pam_namespace.so 來設定私人使用者 tmpdir 或 tmpfs。您可以在那裡以明文形式儲存您的密碼以供sshpass 等使用,或者更好的是可以將ssh-agent 的套接字放在該目錄中並將您的個人私鑰加載到該代理中,同時確保對代理的存取受到保護以防止存取相同使用者的其他會話。如果您有一個具有強密碼的私鑰,您也可以將其儲存在機器上。否則你必須轉移它。您也可以將整個 /tmp 目錄設定為私人目錄(可能共用某些子目錄),並以相當安全的方式利用 SSH 代理轉發(您無法真正保護它不被 root 使用者濫用,但至少如果您使用 tmpfs root很難使用Auth-Sock,而一般使用者則不可能使用Auth-Sock)。
無論如何,您需要能夠充分配置伺服器,或者需要充分配置伺服器 - 至少使用者的進程不能相互連接。
答案2
您可能正在尋找ssh-agent
,它是 OpenSSH 附帶的。使用該-t
選項設定逾時。