Odpowiedzi:
Nie. To nie jest polecenie „dozwolone”, ale „wymuszone” (jako opcja ForceCommand ).
Jedyną możliwością jest użycie różnych klawiszy dla różnych poleceń lub odczytanie parametrów z stdin
.
Możesz mieć tylko jedno polecenie na klawisz, ponieważ polecenie jest „wymuszone”.
Ale możesz użyć skryptu opakowania. Wywołane polecenie pobiera oryginalny wiersz polecenia jako zmienną środowiskową $SSH_ORIGINAL_COMMAND
, którą może ocenić.
Np. Wstaw to ~/.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
Następnie odwołaj się do tego za ~/.ssh/authorized_keys
pomocą
command="/home/user/.ssh/allowed-commands.sh",…
W wielkim SSH, The Secure Shell: The Definitive Guide O'Reilly, w rozdziale ósmym znajduje się ładny przykład z wykorzystaniem skryptu, takiego jak:
#!/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
Używając tego w swoim .authorized_keys
pliku, takich jak:
command="/path/to/your/script.sh" <ssh-key>
... daje to, wykonując 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
a wszystkie inne rzeczy, które mogą być użyteczne niektóre dni.
command
ogólnie tej opcji?
Inne podejścia wykorzystują np. Ograniczoną powłokę dla danego użytkownika lub opakowują, która ogranicza polecenia do wszystkich plików / skryptów znalezionych w określonym katalogu, umożliwiając w ten sposób powiększenie listy poleceń bez zmiany opakowania.
W innym artykule opisano ogólny skrypt, który dopuszcza również argumenty wiersza poleceń do dozwolonych poleceń, ale pozwala zablokować je za pomocą reguł wyrażonych jako wyrażenia regularne.
Ten przykład byłby wyrażony w następujący sposób:
command="only systemctl shutdown"
I .onlyrules
pliki zostaną wykonane z tego materiału:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
Zaletą tego podejścia „tylko” jest to, że nie ma potrzeby pisania indywidualnych skryptów dla każdego użytkownika i sytuacji.
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
), aby był dostępny w skryptach. Daje również przykład automatycznych skryptów, które pozwalająSSH_ORIGINAL_COMMAND
na uruchomienie określonych wzorców . Zobacz także unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html