Authorized_keysには、キーを1つのコマンドに制限するcommand = "..."オプションがあります。キーをmultipleコマンドに制限する方法はありますか?例えば。そこに正規表現を持っているか、他の設定ファイルを編集して?
いいえ。「許可」コマンドではなく、「強制」コマンドです( ForceCommand オプションとして)。
唯一の可能性は、異なるコマンドに異なるキーを使用するか、stdin
からパラメーターを読み取ることです。
コマンドは「強制」されているため、キーごとに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",…
素晴らしい 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:
他のアプローチは、例えば特定のユーザーの制限付きシェル、または特定のディレクトリにあるすべてのファイル/スクリプトへのコマンドを制限するラッパーを使用して、ラッパーを変更せずにコマンドのリストを拡張できます。
別の記事 は、許可されたコマンドへのコマンドライン引数も許可するが、正規表現として表現されたルールでそれらをロックすることを可能にする一般的なスクリプトについて説明しています。
この例 は次のように表現されます。
command="only systemctl shutdown"
と .onlyrules
ファイルは次の内容で作成されます:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
この「唯一の」アプローチの利点は、ユーザーおよび状況ごとに個別のスクリプトを記述する必要がないことです。