Risposte:
No. Non è un comando "consentito", ma un comando "forzato" (come opzione ForceCommand ).
L'unica possibilità è usare tasti diversi per comandi diversi o leggere parametri da stdin
.
Puoi avere un solo comando per tasto, perché il comando è "forzato".
Ma puoi usare uno script wrapper. Il comando chiamato ottiene la riga di comando originale come variabile di ambiente $SSH_ORIGINAL_COMMAND
, che può valutare.
Ad esempio, inseriscilo in ~/.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
Quindi fare riferimento in ~/.ssh/authorized_keys
con
command="/home/user/.ssh/allowed-commands.sh",…
Nel grande SSH, The Secure Shell: The Definitive Guide book di O'Reilly, nel capitolo otto, c'è un bell'esempio dato usando una sceneggiatura come la seguente:
#!/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
Usando questo nel tuo .authorized_keys
file come:
command="/path/to/your/script.sh" <ssh-key>
... ti dà questo quando fai 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
e tutte le altre cose che potrebbe risultare utile un giorno.
command
opzione in generale?
Altri approcci usano ad esempio una shell limitata per l'utente dato o usano un wrapper che limita i comandi a tutti i file / script trovati in una directory specifica, permettendo così di aumentare l'elenco dei comandi senza cambiare il wrapper.
Un altro articolo descrive uno script generico, che consente anche argomenti della riga di comando ai comandi consentiti, ma consente di bloccarli con regole espresse come espressioni regolari.
Questo esempio sarebbe espresso nel modo seguente:
command="only systemctl shutdown"
E un .onlyrules
file verrebbe creato con questo contenuto:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
Il vantaggio di questo approccio "unico" è che non è necessario scrivere singoli script per ciascun utente e situazione.
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
) in modo che sia disponibile negli script. Anche per dare un esempio di script automatici che consentono l'esecuzione di determinati schemiSSH_ORIGINAL_COMMAND
. Vedi anche unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html