Como eu configuro o SSHd para permitir um único comando, sem conceder acesso de login completo ao usuário?

11

Estou procurando a melhor maneira de chamar o comando remoto através do SSH. Eu crio o usuário 'rpcall', giro um novo certificado e preenchei as chaves autorizadas. Fixe um pouco mais com

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

agora o usuário rpcall não pode acessar o terminal

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

mas é possível executar qualquer comando

ssh -l rpc 192.168.12.1 cat /etc/passwd

Existe alguma solução que eu possa limitar a execução de comandos apenas a um script de processamento? Por exemplo /home/rpcall/bin/command.sh

Eu configurei o bash shell para esse usuário e usando o script de processamento de execução forçada .bashrc, mas não sei como passar parâmetros da chamada ssh.

.bashrc para o usuário rpcall

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

chamada ssh de outra máquina

ssh -l rpcall 192.168.12.1 "param1" "param2"
andrew
fonte

Respostas:

19

Você pode restringir comandos usando o arquivo allowed_keys. Coloque command="/home/rpcall/bin/command.sh"antes da chave, no arquivo allowed_keys, e o usuário só executará esse comando quando se conectar.

Verifique a página de manual para chaves_autorizadas, é dessa página de manual,

 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.

Se você precisar de mais de um comando, precisará basicamente configurar vários conjuntos de chaves e usar chaves diferentes para fornecer comandos diferentes.

Edit: Acabei de notar, o comando original está disponível na SSH_ORIGINAL_COMMANDvariável de ambiente, para que você possa realmente lidar com essa entrada usando seu próprio script, fazendo algo inteligente.

EightBitTony
fonte
4
O comando especificado pode acessar os parâmetros através da SSH_ORIGINAL_COMMANDvariável de ambiente. Dessa forma, os parâmetros podem ser passados ​​para esse comando, basta analisar a variável de ambiente e fazer o trabalho solicitado.
1113 Oliver Oliver
Sim, atualizei a resposta alguns minutos atrás, quando notei isso também.
EightBitTony
Solução perfeita com opção de comando e SSH_ORIGINAL_COMMAND, exatamente o que eu preciso. Obrigado EightBitTony e Oliver!
18713 Andrew Andrew