ssh-agent 行為的差異

ssh-agent 行為的差異

看來我配置的兩個帳戶的 ssh-agent 行為之間存在一些差異。

我編寫了一個簡單的監控腳本來檢查我們正在運行的一些虛擬機器的可用性。我用我的主訪問帳戶進行了所有測試和調試。在此過程中,我產生了 SSH 金鑰對,啟動了 ssh-agent,並將身分新增至代理程式中,以允許腳本無需密碼即可進行 ssh。

現在,我想以服務帳戶使用者身分執行此腳本。我建立了服務帳戶,並為了產生金鑰而暫時將登入 shell 設定為 /bin/bash。我產生了密鑰,刪除了密碼,並將身份添加到代理中。

差異似乎在於 shell 連接到代理的方式。在我的使用者帳戶中,自從我開始測試(大約兩週)以來,我不必重新啟動代理。但是,當我嘗試在服務帳戶下運行腳本時,我似乎每次都必須重新啟動代理,添加身份,然後執行工作。

理想情況下,我希望代理程式無限期地運行,並讓服務帳戶在腳本運行時自動重新連接到它,這樣我就不需要管理腳本中的進程。我查看了每個帳戶的配置,沒有發現任何差異。任何見解將不勝感激。

**編輯:我忘記指出代理確實持續運行,但服務帳戶的 shell 進程似乎沒有利用它,必須開始一個新的進程:

ovmmon   14043  0.0  0.0  53916   204 ?        Ss   May17   0:00 ssh-agent
ovmmon   14952  0.0  0.0  53916   204 ?        Ss   May17   0:00 ssh-agent

答案1

這裡發生了兩件事之一:

  1. 當您登出時,ssh-agent 實際上已關閉
  2. ssh-agent 仍在運行,但您正在丟失有關其 PID 和管道的信息

您可以透過執行 ps -ef 並檢查 ssh-agent 來檢查是哪一種情況。

如果 ssh-agent 已失效,您需要一種方法來使其保持活動狀態。以下是三種方法:

  1. 您可以在伺服器啟動時從啟動腳本啟動 ssh-agent,並將輸出回顯到檔案(具有適當的存取權限以防止其被濫用)。如果您使密鑰無密碼,您也可以從腳本新增密鑰。 (顯然,只有當您連接的帳戶在遠端伺服器上的權限非常有限時,才建議使用最後一部分)。然後讓您的腳本從啟動時建立的檔案讀取 SSH 代理程式資訊。
  2. 登入服務帳戶時使用螢幕;然後在啟動代理程式後斷開與螢幕會話的連線。
  3. 啟動代理程式時使用nohup。

如果 ssh-agent 沒有死,但您丟失了環境訊息,請確保在啟動它時將其環境變數寫入特定檔案。然後,在登入時,讓您的 shell 取得該檔案。

答案2

如果您使用子 shell 呼叫方法,則 ssh-agent 將在登出 shell 時終止。如果您使用 eval 方法,shell 將保持運作狀態,直到手動終止。

看:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm

具體來說:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm#ch06-50031.html

另外,我知道從 cron ENV 變數運行時可能會導致問題。這是另一個需要檢查的領域。

相關內容