Shell

用程序替換登錄外殼(迷你監獄)

  • June 27, 2018

有沒有更好的方法,最好沒有額外的軟體堆棧,將特定的 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 和會話。

如果您對此答案有任何疑問或問題,請發表評論。我感謝回饋以糾正任何誤解並改進我的文章。我可以根據需要更新我的答案。

祝你好運!

引用自:https://unix.stackexchange.com/questions/452213