Você pode forçar isso com o sinalizador command=
no arquivo authorized_keys
no lado do servidor. De man sshd
:
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 channel 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 certain public keys to perform just a specific operation. An example 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, e.g. using the restrict key option.
The command originally supplied by the client is available in the SSH_ORIGINAL_COMMAND environment variable. Note that this option applies to shell, command or subsystem execution. Also note that this command may be superseded by a sshd_config(5) ForceCommand directive.
If a command is specified and a forced-command is embedded in a certificate used for authentication, then the certificate will be accepted only if the two commands are identical.
Você encontrará muitos exemplos para isso em tutoriais sobre configurações do git, bzr e friends, para acesso ssh, onde você quer que eles não façam nada além de acessar o controle de versão.
Note que também há uma sshd_config
directive ForceCommand
, que faz basicamente a mesma coisa ("Força a execução do comando especificado pelo ForceCommand, ignorando qualquer comando fornecido pelo cliente e ~ / .ssh / rc se presente. O comando é invocado usando o shell de login do usuário com a opção -c. "), Mas também funciona se você usar o login baseado em senha e pode ser restrito a determinados IPs de origem. Ele precisará entrar na configuração do servidor global, por isso, não dimensiona bem.