我有一個 Centos 7 伺服器的專用網路。每台伺服器只能透過 SSH 堡壘存取。此外,所有這些伺服器都使用 SSSD 根據 LDAP 目錄對 SSH 使用者的金鑰進行驗證。
由於金鑰是根據 LDAP 目錄進行身份驗證的,因此不存在標準authorized_keys
檔案。該二進位文件不是標準authorized_keys
文件,而是/usr/bin/sss_ssh_authorizedkeys
透過管道將針對 LDAP 的查詢sshd
格式化為authorized_keys
文件,但實際上並不是文件。因此,commands=" ... "
據我所知,透過將 RSA 金鑰綁定到條目來限制使用者使用特定命令是不可能的。
SSH 使用者可以使用以下命令透過堡壘對其工作站進行身份驗證:
ssh -A -l [email protected] joes.workstation.ip -o ProxyCommand="ssh -l [email protected] -q bastion.ip nc joes.workstation.ip %p"
不幸的是,他們還能夠透過 SSH 連接到堡壘伺服器上的會話,這是我不希望他們能夠做到的。
無論如何,我可以使用我目前的工具(SSSD、SSHD、LDAP 目錄)來允許 SSH 使用者通過堡壘,但不能進入堡壘?
答案1
sssd
當我遇到這個問題時,允許您按群組設定配置的版本仍在開發中。
我最終ForceCommand
在指令和指令sshd_config
下添加了一個條目:Match
AcceptEnv
Match Group [email protected]
AcceptEnv SomeVariable
AcceptEnv SomeOtherVariable
ForceCommand /path/to/some/script/I/wrote
然後,在 shell 腳本中,我使用 ssh 用戶端傳遞的變數來執行某些操作。
例如,如果客戶端這樣呼叫:
$ SomeVariable=foo ssh -i path/to/key -l [email protected] -o SendEnv=SomeVariable bastion.server
該腳本將有權存取環境變數SomeVariable
;使用您喜歡的任何語言存取它,並使用它來執行某些操作。
確保您的腳本不會退出到堡壘上的 shell 工作階段。