Wie konfiguriere ich SSHd so, dass ein einzelner Befehl zugelassen wird, ohne dem Benutzer vollständigen Anmeldezugriff zu gewähren?

11

Ich suche nach dem besten Weg, um Remote-Befehl über SSH aufzurufen. Ich erstelle den Benutzer 'rpcall', generiere ein neues Zertifikat und fülle autorisierte Schlüssel aus. Sichern Sie es ein bisschen mehr mit

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

Jetzt kann sich der Benutzer rpcall nicht am Terminal anmelden

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

Es ist jedoch möglich, einen beliebigen Befehl auszuführen

ssh -l rpc 192.168.12.1 cat /etc/passwd

Gibt es eine Lösung, mit der ich die Befehlsausführung nur auf ein Verarbeitungsskript beschränken kann? Zum Beispiel /home/rpcall/bin/command.sh

Ich habe die Bash-Shell für diesen Benutzer eingerichtet und das .bashrc Force Run-Verarbeitungsskript verwendet, aber ich weiß nicht, wie ich Parameter vom ssh-Aufruf übergeben soll.

.bashrc für Benutzer rpcall

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

SSH-Anruf von einem anderen Computer

ssh -l rpcall 192.168.12.1 "param1" "param2"
Andrew
quelle

Antworten:

19

Sie können Befehle mithilfe der Datei authorized_keys einschränken. Fügen Sie command="/home/rpcall/bin/command.sh"den Schlüssel in die Datei "authorized_keys" ein, und der Benutzer führt diesen Befehl immer nur aus, wenn er eine Verbindung herstellt.

Überprüfen Sie die Manpage auf autorisierte_Tasten. Dies ist von dieser Manpage.

 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.

Wenn Sie mehr als einen Befehl benötigen, müssen Sie grundsätzlich mehrere Schlüsselsätze einrichten und unterschiedliche Tasten verwenden, um unterschiedliche Befehle zu erhalten.

Bearbeiten: Ich habe gerade bemerkt, dass der ursprüngliche Befehl in der SSH_ORIGINAL_COMMANDUmgebungsvariablen verfügbar ist, sodass Sie diese Eingabe tatsächlich mit Ihrem eigenen Skript verarbeiten und etwas Kluges tun können.

EightBitTony
quelle
4
Der angegebene Befehl kann über die SSH_ORIGINAL_COMMANDUmgebungsvariable auf die Parameter zugreifen . Auf diese Weise können Parameter an diesen Befehl übergeben werden. Er muss lediglich diese Umgebungsvariable analysieren und die angeforderte Arbeit ausführen.
Oliver
Ja, ich habe die Antwort vor ein paar Minuten aktualisiert, als ich das auch bemerkte.
EightBitTony
Perfekte Lösung mit Befehlsoption und SSH_ORIGINAL_COMMAND, genau das, was ich brauche. Vielen Dank an EightBitTony und Oliver!
Andrew