SSH authorized_keys 命令选项:多个命令?

SSH authorized_keys 命令选项:多个命令?

authorized_keys 有一个 command="..." 选项,将密钥限制为单个命令。有没有办法将密钥限制为多种的命令?例如,通过使用正则表达式,或者通过编辑其他配置文件?

答案1

不是。这不是“允许”的命令,而是“强制”的命令(因为部队指挥选项)。

唯一的可能性是使用不同的键来执行不同的命令或从中读取参数stdin

答案2

每个键只能有一个命令,因为该命令是“强制的”。

但是您可以使用包装脚本。被调用的命令将原始命令行作为环境变量$SSH_ORIGINAL_COMMAND,并对其进行评估。

例如将其放入~/.ssh/allowed-commands.sh

#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.

case "$SSH_ORIGINAL_COMMAND" in
    "systemctl restart cups")
        systemctl restart cups
        ;;
    "shutdown -r now")
        shutdown -r now
        ;;
    *)
        echo "Access denied"
        exit 1
        ;;
esac

然后引用~/.ssh/authorized_keys

command="/home/user/.ssh/allowed-commands.sh",…

答案3

在伟大的SSH,安全外壳:权威指南O'Reilly 的书第八章中给出了一个很好的例子,使用如下脚本:

#!/bin/sh

/bin/echo "Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit"

/bin/echo "Your choice:"

read ans

while [ "$ans" != "q" ]
do
   case "$ans" in
      1)
         /bin/date
         ;;
      2)
         /usr/bin/who
         ;;
      3)
         /usr/bin/top
         ;;
      q)
         /bin/echo "Goodbye"
         exit 0
         ;;
      *)
         /bin/echo "Invalid choice '$ans': please try again"
         ;;
   esac
   /bin/echo "Your choice:"
   read ans
done
exit 0

在您的文件中使用它,.authorized_keys例如:

command="/path/to/your/script.sh" <ssh-key>

...执行下列操作时会给出以下信息ssh

Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit
Your choice:

答案4

其他方法例如为给定用户使用受限的 shell 或使用包装器将命令限制在特定目录中找到的所有文件/脚本,从而无需更改包装器即可扩充命令列表。

另一篇文章描述一个通用脚本,它也允许命令行参数用于允许的命令,但允许用以正则表达式表示的规则锁定它们。

这个例子可以用以下方式表达:

command="only systemctl shutdown"

.onlyrules并将制作一个包含以下内容的文件:

\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}

这种“唯一”方法的优点是不需要为每个用户和情况编写单独的脚本。

相关内容