Jak skonfigurować SSHd, aby zezwalał na pojedyncze polecenie, nie dając użytkownikowi pełnego dostępu do logowania?

11

Szukam najlepszego sposobu na wywołanie zdalnego sterowania przez SSH. Tworzę użytkownika „rpcall”, generuję nowy certyfikat i wypełniam klucze autoryzowane. Zabezpiecz go jeszcze bardziej

from="ip",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty ssh-rsa ......

teraz użytkownik rpcall nie może zalogować się do terminala

ssh -l rpc 192.168.12.1
PTY allocation request failed on channel 0

ale możliwe jest uruchomienie dowolnego polecenia

ssh -l rpc 192.168.12.1 cat /etc/passwd

Czy jest jakieś rozwiązanie, które mogę ograniczyć wykonywanie poleceń tylko do jednego skryptu przetwarzania? Na przykład /home/rpcall/bin/command.sh

Skonfigurowałem powłokę bash dla tego użytkownika i używam skryptu przetwarzania wymuszonego .bashrc, ale nie wiem jak przekazać parametry z wywołania ssh.

.bashrc dla użytkownika rpcall

/home/rpcall/bin/command.sh $params1 $params2
exit

połączenie ssh z innej maszyny

ssh -l rpcall 192.168.12.1 "param1" "param2"
Andrzej
źródło

Odpowiedzi:

19

Możesz ograniczyć komendy za pomocą pliku autoryzowanych_kluczy. Umieść command="/home/rpcall/bin/command.sh"przed kluczem w pliku autoryzowanych_kluczy, a użytkownik kiedykolwiek uruchomi to polecenie tylko wtedy, gdy się połączy.

Sprawdź stronę podręcznika dla autoryzowanych kluczy, to ze strony podręcznika,

 command="command"
         Specifies that the command is executed whenever this key is used
         for authentication.  The command supplied by the user (if any) is
         ignored.  The command is run on a pty if the client requests a
         pty; otherwise it is run without a tty.  If an 8-bit clean chan-
         nel is required, one must not request a pty or should specify
         no-pty.  A quote may be included in the command by quoting it
         with a backslash.  This option might be useful to restrict cer-
         tain public keys to perform just a specific operation.  An exam-
         ple might be a key that permits remote backups but nothing else.
         Note that the client may specify TCP and/or X11 forwarding unless
         they are explicitly prohibited.  The command originally supplied
         by the client is available in the SSH_ORIGINAL_COMMAND environ-
         ment variable.  Note that this option applies to shell, command
         or subsystem execution.

Jeśli potrzebujesz więcej niż jednego polecenia, musisz w zasadzie skonfigurować kilka zestawów kluczy i używać różnych klawiszy, aby uzyskać różne polecenia.

Edycja: Właśnie zauważyłem, że oryginalne polecenie jest dostępne w SSH_ORIGINAL_COMMANDzmiennej środowiskowej, więc możesz naprawdę obsłużyć te dane wejściowe za pomocą własnego skryptu, robiąc coś sprytnego.

EightBitTony
źródło
4
Podane polecenie może uzyskać dostęp do parametrów za pośrednictwem SSH_ORIGINAL_COMMANDzmiennej środowiskowej. W ten sposób parametry mogą być przekazywane do tego polecenia, wystarczy przeanalizować zmienną środowiskową i wykonać żądaną pracę.
Oliver,
Tak, zaktualizowałem odpowiedź kilka minut temu, kiedy to zauważyłem.
EightBitTony,
Idealne rozwiązanie z opcją polecenia i SSH_ORIGINAL_COMMAND, dokładnie to, czego potrzebuję. Dziękuję EightBitTony i Oliver!
andrew