從另一個非 root 使用者訪問 SSH_AUTH_SOCK
場景:
我在本地 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?
您需要做兩件事:
- 設置
SSH_AUTH_SOCK
變數,使其指向正確的文件- 允許其他使用者連接到套接字(使用文件系統權限)
因此,您可以做的是:
作為 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