SSH强制命令参数

时间:2012-09-10 07:03:03

标签: ssh ssh-keys openssh

我正在尝试编写一个脚本,该脚本在成功登录ssh后验证用户权限。

我是通过SSH强制命令执行此操作的。我想传递脚本参数(例如它正在验证的用户),但我不确定我会怎么做。

任何帮助?

3 个答案:

答案 0 :(得分:2)

我自己想出来了。您可以通过设置环境变量并在强制命令脚本中读取参数来将参数传递给强制命令脚本。

答案 1 :(得分:0)

SSH不允许通过参数(甚至通过管道)传递密码,它是由设计制作的,甚至在man页面中描述。通过ssh自动登录的唯一方法是通过文件验证。

我认为您可以尝试将用户提供的密码与/ etc / shadow中的值进行比较。这应该是诀窍:))

答案 2 :(得分:0)

您可以在sshd配置文件中设置ForcedCommand,或者在相应用户的authorized_keys文件中设置更好。

ssh execution将环境变量SSH_ORIGINAL_COMMAND设置为发送到服务器的完整命令行,然后执行ForcedCommand

编写使用此环境变量提供参数的脚本具有安全隐患,因为攻击者可能会添加例如命令行末尾的; rm -rf /。然后首先运行ForcedCommand,然后运行rm -rf /

This article描述了一个脚本,可用于一般性地锁定允许的命令行。它还包含相关信息的链接。

机制如下:

  1. 将脚本(仅限)设为ForcedCommand
  2. 将允许的'real'命令添加为参数
  3. 在相应用户帐户的主目录中添加规则文件(.onlyrules),将允许的参数限制为实际命令。
  4. 唯一的脚本读取SSH_ORIGINAL_COMMAND检查命令是否a)允许(在参数列表中)b)在用户PATH上,然后检查参数是否通过规则(在我们的例子中是简单的sed(1)脚本)

    设置示例:

    ForcedCommand /usr/local/bin/only ls
    

    authorized_keys

    command="/usr/local/bin/only ls" ssh-rsa AAAA...
    

    .onlyrules

    \:^ls /tmp$:{p;q}
    

    这只允许将命令ls /tmp发送到远程主机。