【问题标题】:Passing parameters to a SSH client to execute a ForceCommand with parameters将参数传递给 SSH 客户端以执行带参数的 ForceCommand
【发布时间】:2011-07-20 03:54:54
【问题描述】:

我无法将命令参数远程传递给 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 user_1@remotehost "set_new_mode param1 param2"

user_1_shell程序好像被执行了,但是参数字符串好像没有传进去。

也许,我应该问,ForceCommand 真的支持这个吗? 如果是的话,有什么建议可以让它发挥作用吗?

谢谢。

【问题讨论】:

  • 我找到了答案。远程服务器捕获参数字符串并将其保存在“$SSH_ORIGINAL_COMMAND”环境变量中。
  • 使用答案功能,将您的分辨率粘贴到上面,然后您可以检查答案是否已接受。你可能会因此获得积分。我会投票给你,所以你会得到一些分数。

标签: shell unix ssh openssh


【解决方案1】:

我找到了答案。远程服务器捕获参数字符串并将其保存在“$SSH_ORIGINAL_COMMAND”环境变量中。

【讨论】:

    【解决方案2】:

    正如已经回答的那样,从 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
    

    例如,如果您希望仅允许带有两个字母数字任意参数的“set_new_mode”作为参数,.onlyrules 文件将如下所示:

    \:^/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' 在服务器上查找命令并使用其名称来匹配规则。如果这些检查中的任何一个失败,则不会运行该命令。

    【讨论】:

      【解决方案3】:

      [披露:我写了下面描述的 sshdo]

      有一个名为 sshdo 的程序可以执行此操作。它控制哪些命令可以通过传入的 ssh 连接执行。可在以下位置下载:

      http://raf.org/sshdo/ (read manual pages here)
      https://github.com/raforg/sshdo/
      

      它有一个学习模式来允许所有尝试的命令,以及一个 --learn 选项来生成永久允许学习命令所需的配置。然后可以关闭学习模式,其他任何命令都不会执行。

      它还有一个 --unlearn 选项来停止允许不再使用的命令,以便在需求随时间变化时保持严格的最低权限。

      也可以手动配置。

      对于它允许的内容非常挑剔。它不允许带有任何参数的命令。只能允许完整的 shell 命令。但它确实支持简单的模式来表示类似的命令,这些命令仅在命令行上出现的数字上有所不同(例如序列号或日期/时间戳)。

      这就像 ssh 命令的防火墙或白名单控制。

      【讨论】:

        猜你喜欢
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-03
        相关资源
        最近更新 更多