Відповіді:
Ні. Це не "дозволена" команда, а "примусова" команда (як варіант ForceCommand ).
Єдина можливість - використовувати різні клавіші для різних команд або зчитувати параметри з stdin
.
Ви можете мати лише одну команду на ключ, оскільки команда "вимушена".
Але ви можете використовувати сценарій обгортки. Викликана команда отримує оригінальний командний рядок як змінну середовища $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 Final Guide від 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:
scp
, sftp
і всі інші речі, які вам можуть здатися корисними в якийсь день.
command
опції?
Інші підходи використовують, наприклад, обмежений оболонку для даного користувача або використовують обгортку, яка стримує команди для всіх файлів / скриптів, знайдених у конкретному каталозі, дозволяючи таким чином розширити список команд без зміни обгортки.
Інша стаття описує загальний сценарій, який також дозволяє аргументи командного рядка дозволеним командам, але дозволяє блокувати їх правилами, вираженими як регулярні вирази.
Цей приклад виражатиметься наступним чином:
command="only systemctl shutdown"
І буде створено .onlyrules
файл із цим вмістом:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
Перевага такого "єдиного" підходу полягає в тому, що немає необхідності писати окремі сценарії для кожного користувача та ситуації.
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
), щоб він був доступний у сценаріях. Також навести приклад для автоматизованих сценаріїв, які дозволяютьSSH_ORIGINAL_COMMAND
запускати певні шаблони . Дивіться також unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html