das ganz funzt nur wenn du den ssh komplett auf Zertifikate umstellst. Sonst kann man die Beschränkung zu einfach umgehen.
Grundsätzlich würde dann die authorized_keys des entsprechenden Users so ausschauen:
Code:
from="*",command="/root/validate-ssh-cmd.sh" ssh-rsa HASH_WERT_DES_KEYS
from="*" heisst jede IP mit dem richtigen Schlüssel darf zugreifen
command="/pfad/zum/cmd" legt das auszuführende Kommando fest
Diese Datei bekommt vom ssh das vom Client übergebene Kommando in $SSH_ORIGINAL_COMMAND und prüft dieses. Wenn es in der Whitelist steht (bei mir rsync --server, mysqldump , und ls ) wird das Kommando ausgeführt. ansonsten wird ein Fehler geworfen und die Shell wird geschlossen
Code:
#!/bin/bash
case "$SSH_ORIGINAL_COMMAND" in
rsync\ --server* | mysqldump\ * | ls\ *)
$SSH_ORIGINAL_COMMAND
;;
*)
exit 1
;;
esac
Wenn es aber darum geht dass ein User nur einen Tunnel öffnen können soll, resp automatisch ein Tunnel/Programm geöffnet/ausgeführt werden soll, dann gibt es mit authorized_keys noch viel bessere Möglichkeiten z.b. kann du via diesem File auch ssh Eigenschaften festlegen
Code:
from="*",command="irgendwas",no-port-forwarding,no-agent-forwarding,no-pty ssh-rsa HASH