Как настроить SSHd для разрешения одной команды, не предоставляя пользователю полный доступ к входу?

11

Я ищу лучший способ вызвать удаленную команду через SSH. Я создаю пользователя 'rpcall', генерирую новый сертификат и заполняю авторизованные ключи. Защитите это немного больше с

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

теперь пользователь rpcall не может войти в терминал

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

но можно запустить любую команду

ssh -l rpc 192.168.12.1 cat /etc/passwd

Есть ли решение, которое я могу ограничить выполнение команды только одним сценарием обработки? Например /home/rpcall/bin/command.sh

Я настроил оболочку bash для этого пользователя и использовал скрипт принудительной обработки .bashrc, но я не знаю, как передать параметры из вызова ssh.

.bashrc для пользователя rpcall

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

вызов по SSH с другой машины

ssh -l rpcall 192.168.12.1 "param1" "param2"
Андрей
источник

Ответы:

19

Вы можете ограничить команды, используя файл author_keys. Поместите его command="/home/rpcall/bin/command.sh"перед ключом в файле authorized_keys, и пользователь будет только запускать эту команду при подключении.

Проверьте справочную страницу для authorized_keys, это с этой справочной страницы,

 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.

Если вам нужно более одной команды, вам нужно в основном настроить несколько наборов ключей и использовать разные ключи, чтобы дать вам разные команды.

Edit: я только что заметил, оригинальная команда доступна в SSH_ORIGINAL_COMMANDпеременной окружения, так что вы действительно можете обрабатывать этот ввод, используя свой собственный скрипт, делая что-то умное.

EightBitTony
источник
4
Указанная команда может получить доступ к параметрам через SSH_ORIGINAL_COMMANDпеременную окружения. Таким образом, параметры могут быть переданы этой команде, просто нужно проанализировать переменную среды и выполнить запрошенную работу.
Оливер
Да, обновил ответ несколько минут назад, когда я тоже это заметил.
EightBitTony
Идеальное решение с опцией команды и SSH_ORIGINAL_COMMAND, именно то, что мне нужно. Спасибо EightBitTony и Оливеру!
Андрей