Mehrere Commands bei SSH authorized_keys

Will man einer Person die sich mit SSH verbindet nur ein bestimmtes Kommando erlauben geht das, in dem man in .ssh/authorized_keys das Keyword command= davor setzt. Das ist besonders praktisch wenn man z.B. nur ein bestimmtes rsync Kommando erlauben möchte. Aber geht das auch mit mehreren Befehlen?

Technisch gesehen steht die SSH „command“ Direktive eigentlich für ForceCommand, heisst es ist nicht ein bestimmtes Kommando erlaubt, sondern das definierte Kommando wird bei jeder SSH Verbindung (als einziges) ausgeführt. Damit kann eigentlich nur ein Kommando „zulassen“. Da aber, dass ursprüngliche Kommando in der Shell Variable $SSH_ORIGINAL_COMMAND steht, lassen sich mittels einem Wrapper-Script trotzdem mehrere Commands definieren.

Ein solches Wrapper-Script kann beispielsweise so aussehen:

.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
  "rsync --server -logDtpre.iLsfxC --delete --numeric-ids . /mnt/backup/")
    rsync --server -logDtpre.iLsfxC --delete --numeric-ids . /mnt/backup/
    ;;
  "shutdown -r now")
    shutdown -r now
    ;;
  *)
  echo "Access denied"
    exit 1
    ;;
esac

Dies lässt jetzt nur ein rsync Kommando zu, oder ein reboot.

Man kann damit auch so menus machen, wie man sie beispielsweise von pfSense kennt:

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

Einbinden tut man das dann einfach in .ssh/authorized_keys wie folgt:

command="/root/.ssh/allowed-commands.sh" ssh-rsa <ssh-key>

Weitere Informationen

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert