Ssh

從另一個非 root 使用者訪問 SSH_AUTH_SOCK

  • October 25, 2012

場景:

我在本地 PC 上執行 ssh-agent,並且我的所有伺服器/客戶端都設置為轉發 SSH 代理身份驗證。我可以使用本地 PC 上的 ssh-agent 在所有機器之間跳轉。這樣可行。

我需要能夠以我自己 (user1) 的身份 SSH 到一台機器,更改為另一個名為 user2 的使用者 ( sudo -i -u user2 ),然後使用我在本地 PC 上執行的 ssh-agent SSH 到另一個機器。假設我想做 ssh user3@machine2 之類的事情(假設 user3 在他們的 authorized_keys 文件中有我的公共 SSH 密鑰)。

我已將sudo配置為保留SSH_AUTH_SOCK環境變數。

涉及的所有使用者(使用者

$$ 1-3 $$),是非特權使用者(不是 root)。 問題:

當我更改為另一個使用者時,即使正確設置了 SSH_AUTH_SOCK 變數(假設其設置為:/tmp/ssh-HbKVFL7799/agent.13799)user2 無法訪問由 user1 創建的套接字 - 哪個當然是有道理的,否則 user2 可能會劫持 user1 的私鑰並以該使用者的身份跳來跳去。

如果不是通過 sudo 為 user2 獲取 shell,而是通過 sudo 為 root 獲取 shell,這種情況就可以正常工作。因為自然root可以訪問機器上的所有文件。

問題:

最好使用 sudo,如何從 user1 更改為 user2,但仍然可以訪問 user1 的 SSH_AUTH_SOCK?

您需要做兩件事:

  1. 設置SSH_AUTH_SOCK變數,使其指向正確的文件
  2. 允許其他使用者連接到套接字(使用文件系統權限)

因此,您可以做的是:

作為 user1,允許 user2 連接到 socket(對 socket 的完全訪問權限和進入目錄的權限)。我希望您/tmp允許 ACL。

setfacl -m u:user2:rw $SSH_AUTH_SOCK
setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)

更改為其他使用者,並正確導出變數。

sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2

如果要使用 來打開互動式 shell ,則必須在獲得 shell 後自己sudo導出變數。SSH_AUTH_SOCK

引用自:https://serverfault.com/questions/442048