web-dev-qa-db-ja.com

SSH authorized_keysコマンドオプション:複数のコマンド?

Authorized_keysには、キーを1つのコマンドに制限するcommand = "..."オプションがあります。キーをmultipleコマンドに制限する方法はありますか?例えば。そこに正規表現を持っているか、他の設定ファイルを編集して?

17
dkaeae

いいえ。「許可」コマンドではなく、「強制」コマンドです( ForceCommand オプションとして)。

唯一の可能性は、異なるコマンドに異なるキーを使用するか、stdinからパラメーターを読み取ることです。

9
Jakuje

コマンドは「強制」されているため、キーごとに1つのコマンドしか持てません。

ただし、ラッパースクリプトを使用できます。呼び出されたコマンドは、元のコマンドラインを環境変数$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",…
28
hfs

素晴らしい SSH、The Secure Shell:The Definitive Guide O'Reillyによる本の第8章には、次のようなスクリプトを使用して与えられた素晴らしい例があります。

#!/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:
7
gf_

他のアプローチは、例えば特定のユーザーの制限付きシェル、または特定のディレクトリにあるすべてのファイル/スクリプトへのコマンドを制限するラッパーを使用して、ラッパーを変更せずにコマンドのリストを拡張できます。

別の記事 は、許可されたコマンドへのコマンドライン引数も許可するが、正規表現として表現されたルールでそれらをロックすることを可能にする一般的なスクリプトについて説明しています。

この例 は次のように表現されます。

command="only systemctl shutdown"

.onlyrulesファイルは次の内容で作成されます:

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

この「唯一の」アプローチの利点は、ユーザーおよび状況ごとに個別のスクリプトを記述する必要がないことです。

1
Georg Lehner