SSH: Auswirkungen der No-Pty-Login-Option in Authorized_keys

2390
Tadeusz Łazurski

Ich bin verwirrt durch das Verhalten restrictoder die no-ptyAnmeldeoptionen, die einem Schlüssel vorangestellt werden ~/.ssh/authorized_keys.

Für einen bestimmten Schlüssel wollte ich jegliche Interaktion verhindern, außer einen SSH-Tunnel zu einem bestimmten lokalen Port zu starten:

restrict,permitopen="localhost:80" ssh-rsa AAAAB3NzaC1yc2EAAA[...]3c7rmJT5/ tunnel@a.example.com 

Der eigentliche Effekt ist, dass ich mit dem entsprechenden privaten Schlüssel einen Tunnel erstellen kann, aber anscheinend auch beliebige Befehle ausführen kann :

tunnel@a $ ssh -i tunnel_rsa user@b.example.com  PTY allocation request failed on channel 0 Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-64-generic x86_64)  [...]  You have new mail.  ls .ssh/ authorized_keys id_rsa id_rsa.pub known_hosts 

Beachten Sie die PTY allocation request failed on channel 0Nachricht zu Beginn der Sitzung (die darauf hindeutet, dass die Anmeldeoption wirksam wird) und den ls .ssh/Befehl mit der Ausgabe.

Es gibt keine Aufforderung, aber es war nicht meine Absicht. Kann jemand bitte etwas Licht auf dieses werfen? Was ist auch die bevorzugte Methode, um einen bestimmten Schlüssel auf das Erstellen eines Tunnels zu beschränken?

aktualisieren

mit restrictdem tunnel funktioniert nicht wirklich:

$ curl localhost:8080 curl: (52) Empty reply from server 

oder mit HTTPie:

$ http :8080 http: error: ConnectionError: ('Connection aborted.', BadStatusLine("''",)) 

mit folgender Ausgabe des ssh -L ...Befehls:

channel 2: open failed: administratively prohibited: open failed 

Es funktioniert mit no-ptyOption statt restricted, aber das ursprüngliche Problem bleibt bestehen.

1

1 Antwort auf die Frage

1
Tadeusz Łazurski

Nach einigen Recherchen und Experimenten scheint diese Kombination von Optionen den Trick zu vollbringen:

command="",restrict,port-forwarding,permitopen="localhost:80" 

Lassen Sie mich jedes einzeln durchgehen:

  • command=""

    Erlaubt die Ausführung eines Befehls mit dieser Taste

  • restrict

    Deaktivieren Sie alle Optionen, z. B. TTY-Zuweisung, Portweiterleitung, Agentenweiterleitung, Benutzer-RC und X11-Weiterleitung auf einmal.

  • port-forwarding

    Aktiviert die TCP-Portweiterleitung, siehe jedoch unten.

  • permitopen="localhost:80"

    Begrenzt die TCP-Portweiterleitung auf den lokalen Port 80. Das ist das einzige, was dieser Schlüssel zulassen sollte.

Ich konnte dies vor allem durch das Lesen des Kapitels "Client-Konfigurationsdateien" von OpenSSH WikiBook herausfinden, daher geht der Großteil des Kredits an die Autoren (Lars Noodén et al.). Fehlender Teil war port-forwarding- ohne dass Weiterleitung verboten ist, auch wenn permitopendas etwas anderes vermuten lässt.