ssh_config: Geben Sie den Befehl an, der bei der Anmeldung auf dem Remotecomputer ausgeführt werden soll

16

Dies ist eine Erweiterung meiner früheren Frage . Ich muss einen lokal gespeicherten Befehl (dh mount /home) auf einem Remote-Computer bei der SSH-Anmeldung ausführen . Im Moment benutze ich:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

Das funktioniert gut, aber ich habe mich gefragt, ob ich diesen Befehl in meinen .ssh/configeingeben kann, damit ich ihn nicht jedes Mal eingeben muss. Ich habe eine LocalCommandOption gefunden, sehe aber keine RemoteCommandOption.

Es ist wichtig, dass die command-to-be-executedDaten auf dem lokalen Computer gespeichert werden, da sie ein Kennwort zum Öffnen einer verschlüsselten Festplatte enthalten. Aus diesem Grund kann ich den Befehl nicht .profileauf dem Remote-Computer eingeben.

Martin Vegter
quelle

Antworten:

6

Diese Frage wurde bereits bei SuperUser gestellt. In der ersten Antwort wird eine Remote-Datei verwendet, die nicht Ihren Anforderungen entspricht. In der zweiten Antwort wird jedoch vorgeschlagen, einen lokalen Alias ​​zu verwenden. Dies könnte die Lösung für Ihr Problem sein.

Es ist wichtig, dass der auszuführende Befehl auf dem lokalen Computer gespeichert wird, da er ein Kennwort zum Öffnen einer verschlüsselten Festplatte enthält. Aus diesem Grund kann ich den Befehl auf dem Remote-Computer nicht in .profile einfügen.

Dies ist wahrscheinlich nicht sicher. Wenn ich einen echoBefehl als ssh-Befehl verwende, wird er psauf dem Remote-Server angezeigt:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo
Martin von Wittich
quelle
danke, aber in der lösung ~/.ssh/rcist der superuser wieder auf dem remote rechner gespeichert. Bezüglich Ihres Kommentars zum psAnzeigen meiner Befehlszeilenparameter (einschließlich des Kennworts) stört mich das nicht. Es ist die entfernte Maschine, der ich nicht vertraue. Mein lokaler Computer wird nur von mir selbst verwendet, sodass niemand sonst Zugriff darauf hat ps.
Martin Vegter
6
Diese psAusgabe erfolgt von der Remote-Maschine. Der Punkt ist: Alles, was Sie sshals Remote-Befehl angeben, wird auf dem Remote-Server in angezeigt ps.
Martin von Wittich
1
Ja, du hast recht. Vielen Dank für den Hinweis.
Martin Vegter
1
@MartinvonWittich - Jede SE-Site ist unabhängig, so dass es völlig akzeptabel ist, dass jede Site ähnliche Fragen und Antworten hat, solange sie für diese bestimmte Site zum Thema gehören. Es wird empfohlen, Inhalte zu kopieren, wenn ein Q angezeigt wird und sich das A auf einer anderen SE-Site befindet. Passen Sie es entsprechend an, damit es zum Thema passt.
slm
7

Dies wurde in OpenSSH 7.6 hinzugefügt:

Mit der Option "RemoteCommand" können Sie einen Befehl in der ssh-Konfigurationsdatei angeben, anstatt ihn in der Befehlszeile des Clients anzugeben. Auf diese Weise kann die Konfigurationsdatei den Befehl angeben, der auf dem Remote-Host ausgeführt wird.

Ref: https://www.openssh.com/txt/release-7.6

Camden Narzt
quelle
6
RequestTTY yes
RemoteCommand screen -UDr
JRG
quelle
großartig!! Vielen Dank!!
Shrish
2

Dies können Sie in Zusammenarbeit mit der Remote-Maschine wie folgt tun.

Füllen Sie den Befehl auf Ihrem lokalen Computer so aus, dass er in der Umgebungsvariablen ausgeführt wird LC_SSH_INITIAL_COMMAND. SSH ist normalerweise so konfiguriert, dass alle Umgebungsvariablen des Formulars übergeben werden LC_*, da es sich normalerweise um Gebietsschemaeinstellungen handelt.

Führen Sie auf dem Remotecomputer eval "$LC_SSH_INITIAL_COMMAND" die Per-Key-Einstellungen in~/.ssh/authorized_keys oder von aus ~/.ssh/rc(beachten Sie, dass Sie bei Verwendung einer ~/.ssh/rcDatei darauf achten xauthmüssen, dass die X11-Weiterleitung manuell ausgeführt wird).

Mit der authorized_keysMethode können Sie auf ähnliche Weise einen Befehl ausführen, wenn die SSH-Sitzung beendet wird (es sei denn, der Shell-Prozess wird abrupt beendet; Sie sollten mindestens das HUP-Signal abfangen, damit Ihr Befehl ausgeführt wird, selbst wenn die Verbindung unterbrochen wird).

Dies ist jedoch keine gute Lösung, um etwas globales wie das Mounten eines Dateisystems zu tun. Sie müssen darauf achten, nicht erneut zu mounten, wenn das Dateisystem bereits gemountet ist (z. B. aufgrund eines gleichzeitig ausgeführten SSH-Befehls), und nicht das Mounten beim Abmelden aufzuheben. Meine Empfehlung für diesen Anwendungsfall lautet weiterhin , das Mounten explizit durchzuführen, dann Remotebefehle auszuführen, ohne etwas Besonderes zu tun, und das Mounten aufzuheben, wenn Sie nicht mehr auf dieses Dateisystem zugreifen möchten.

Gilles 'SO - hör auf böse zu sein'
quelle
0

Ich habe es nicht ausprobiert, aber ein Ansatz könnte sein

  • Deklarieren Sie Subsystemauf der Fernbedienung ein sshd_config, das den gewünschten Befehl ausführt, indem Sie einige Umgebungsvariablen lesen
  • Verwenden Sie SendEnvon the local .ssh/config, um solche Schlüssel an den Remote-Server weiterzuleiten
untore
quelle