回答:
いいえ。Isは「許可」コマンドではなく、「forced」コマンド(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 book by 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:
scp
、sftp
および他のすべてのものは、あなたがいつか役に立つかもしれません。
command
は一般的なオプションでは有効ではありませんか?
他のアプローチでは、たとえば、特定のユーザーの制限付きシェルを使用したり、特定のディレクトリにあるすべてのファイル/スクリプトへのコマンドを制限するラッパーを使用して、ラッパーを変更せずにコマンドのリストを増やします。
別の記事では、許可されたコマンドに対するコマンドライン引数も許可しますが、正規表現として表されたルールでロックダウンすることを許可する汎用スクリプトについて説明しています。
この例は、次のように表現されます。
command="only systemctl shutdown"
そして、.onlyrules
次のコンテンツでファイルが作成されます。
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
この「唯一の」アプローチの利点は、ユーザーおよび状況ごとに個別のスクリプトを記述する必要がないことです。
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
)を追加するのはsshd自体であることを明確にする価値があるかもしれません。また、特定のパターンSSH_ORIGINAL_COMMAND
を実行できる自動化スクリプトの例を示します。参照してくださいunixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html