2011-03-22 114 views
2

我在將命令參數遠程傳遞給ssh中的「ForceCommand」程序時遇到問題。將參數傳遞給SSH客戶端以使用參數執行ForceCommand

在我的遠程服務器我有這樣的配置中的sshd_config:

Match User user_1 
ForceCommand /home/user_1/user_1_shell 

的user_1_shell程序限制了用戶可以執行的命令,在這種情況下,我只允許用戶執行「set_new_mode的param1 param2的」。任何其他命令將被忽略。

因此,我希望,當客戶端通過ssh登錄比如這個:

ssh [email protected] "set_new_mode param1 param2" 

的user_1_shell程序似乎執行,但參數字符串似乎並沒有被通過。

也許,我應該問,ForceCommand實際上是否支持這個? 如果是,有關我如何使其工作的任何建議?

謝謝。

+1

我找到了答案。遠程服務器捕獲參數字符串並將其保存在「$ SSH_ORIGINAL_COMMAND」環境變量中。 – fr1c710n 2011-03-22 05:57:38

+1

使用答案功能,將上面的解決方案粘貼到上面,然後您可以檢查接受的答案。你可能會得到積分。我會投票,所以你會得到一些觀點。 – shellter 2011-03-28 19:37:25

回答

0

我找到了答案。遠程服務器捕獲參數字符串並將其保存在「$ SSH_ORIGINAL_COMMAND」環境變量中。

0

如已經回答,從ssh客戶端發送的命令行被放入SSH_ORIGINAL_COMMAND環境變量中,只執行ForcedCommand。

如果您在ForcedCommand中使用SSH_ORIGINAL_COMMAND中的信息,則必須注意安全隱患。攻擊者可以通過發送例如任意附加命令來增加你的命令。 ; rm -rf /在命令行結尾處。

This article顯示一個通用腳本,可用於鎖定允許的參數。它還包含相關信息的鏈接。

所描述的方法(即「僅」腳本)的工作方式如下:

  1. 請的「唯一的」腳本ForcedCommand,並給它允許 命令作爲其參數。請注意,可以使用多於一個允許的命令。

  2. 將一個.onlyrules文件到的user_1的主目錄,並與它們對抗的SSH客戶端發送的命令行 匹配規則(正則表達式)填充它。

你的例子看起來像:

Match User user_1 
ForceCommand /usr/local/bin/only /home/user_1/user_1_shell 

,如果,例如,要允許,因爲只有參數正好用兩個字母的任意參數.onlyrules文件看起來像這樣「set_new_mode」:

\:^/home/user_1/user_1_shell set_new_mode [[:alnum:]]\{1,\} [[:alnum:]]\{1,\}$:{p;q} 

注意的是,發送命令到服務器,你必須使用命令行全:

/home/user_1/user_1_shell set_new_mode param1 param2 

'only'在服務器上查找命令並使用其名稱來匹配規則。如果其中任何一項檢查失敗,則該命令不會運行。