Réponses:
Non. Ce n'est pas une commande "autorisée", mais une commande "forcée" (comme option ForceCommand ).
La seule possibilité est d'utiliser différentes touches pour différentes commandes ou de lire des paramètres stdin
.
Vous ne pouvez avoir qu'une seule commande par touche, car la commande est «forcée».
Mais vous pouvez utiliser un script wrapper. La commande appelée obtient la ligne de commande d'origine en tant que variable d'environnement $SSH_ORIGINAL_COMMAND
, qu'elle peut évaluer.
Par exemple, mettez ceci dans ~/.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
Référencez-le ensuite ~/.ssh/authorized_keys
avec
command="/home/user/.ssh/allowed-commands.sh",…
Dans le grand SSH, The Secure Shell: The Definitive Guide book by O'Reilly, dans le chapitre huit, il y a un bel exemple donné en utilisant un script comme le suivant:
#!/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
Utiliser ceci dans votre .authorized_keys
fichier comme:
command="/path/to/your/script.sh" <ssh-key>
... vous donne ceci lorsque vous faites 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
et toutes les autres choses que vous pourriez trouver utiles un jour.
command
option en général?
D'autres approches utilisent par exemple un shell restreint pour l'utilisateur donné ou utilisent un wrapper qui restreint les commandes à tous les fichiers / scripts trouvés dans un répertoire spécifique, permettant ainsi d'augmenter la liste des commandes sans changer le wrapper.
Un autre article décrit un script générique, qui permet également des arguments de ligne de commande aux commandes autorisées, mais permet de les verrouiller avec des règles exprimées sous forme d'expressions régulières.
Cet exemple serait exprimé de la manière suivante:
command="only systemctl shutdown"
Et un .onlyrules
fichier serait créé avec ce contenu:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
L'avantage de cette approche «unique» est qu'il n'est pas nécessaire d'écrire des scripts individuels pour chaque utilisateur et situation.
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
) afin qu'il soit disponible dans les scripts. Aussi pour donner un exemple de scripts automatisés qui permettent à certains modèles deSSH_ORIGINAL_COMMAND
s'exécuter. Voir aussi unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html