用程序替換登錄外殼(迷你監獄)
有沒有更好的方法,最好沒有額外的軟體堆棧,將特定的 ssh 使用者鎖定到程序中而無需訪問工作 shell?想像一個 cli 程序,它應該是使用者可以通過 ssh 訪問的唯一界面。
我的 hacky 解決方案:
在*/etc/passwd*中,將使用者 shell 替換為以下腳本:
#!/bin/bash /bin/bash -c /usr/bin/cli exit 1
手頭的問題
您希望在遠端使用者連接到您的伺服器時鎖定他們使用特定的 shell。正如您可能已經發現的那樣,
chsh
或者其他解決方案是針對本地使用者的。解決方案
根據使用者 muru 的此解決方案,我將編輯您
sshd_config
以使用該ForceCommand
選項。您可以將 ForceCommand 與 Match 一起使用:
Match Address 10.1.0.0/16 ForceCommand /usr/bin/[some shell]
來自 man sshd_config:
Match Introduces a conditional block. ...
> > Match 的參數是一個或多個標準模式對或匹配所有標準的單個標記 All。可用的標準是使用者、組、主機、LocalAddress、LocalPort 和地址。 > > >
ForceCommand
> > 強制執行 ForceCommand 指定的命令,忽略客戶端和 ~/.ssh/rc 提供的任何命令(如果存在)。通過使用帶有 -c 選項的使用者登錄 shell 呼叫該命令。 > > >
因此,您指定的命令將使用使用者的登錄 shell 執行,該 shell 必須接受 -c 選項。命令退出時連接關閉,因此出於所有實際目的,該命令是它們的外殼。
在您的配置文件中使用
ForceCommand
,您可以強制使用支持該-c
選項的 shell。我還將參考此 serverfault 文章以獲取有關如何完成此任務的更多資訊。結論
使用您的
sshd_config
選項強制使用可以支持的 shell,-c
因為這將在完成後關閉 shell 和會話。如果您對此答案有任何疑問或問題,請發表評論。我感謝回饋以糾正任何誤解並改進我的文章。我可以根據需要更新我的答案。
祝你好運!