Overide-Shell für Befehle in der SSH-Konfiguration (~/.ssh/config)

Overide-Shell für Befehle in der SSH-Konfiguration (~/.ssh/config)

Ich habe also eine SSH-Konfigurationsdatei für meinen Benutzer, der Match execsie verwendet, um einige Übereinstimmungen für die IP zu erhalten:

Match exec "echo %h | grepcidr 192.168.12.0/20  &>/dev/null "
  User         ubuntu
  ProxyCommand          ssh my-bastion -W %h:%
  IdentityFile          ~/.ssh/target.pem

Dies funktioniert auf meinem Host einwandfrei, aber ich habe versucht, es auf einem Container zu starten, auf dem ich OpenSSH-Client installiert habe. Die SSH-Verbindung schlägt jedoch fehl, da davon ausgegangen wird, dass der Befehl erfolgreich war (auch wenn ich nicht auf das Netzwerk abziele). Daher wird versucht, durch die Bastion zu gehen.

debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 0

Auf meinem Host gibt es zurück

debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 1

Das sollte das sein, was der SSH-Befehl des Containers zurückgibt

Ich habe nachgeforscht und es stellt sich heraus, dass der SSH-Befehl im Container mit gestartet wird, sh -cwährend der SSH-Befehl, der auf meinem Host gestartet wird, lautet. bash -c Ich kann bestätigen, dass dies die Ursache ist, indem ich beides auf der Befehlszeile teste und die Rückgabe des Befehls mit überprüfe.echo $?

Gibt es eine Möglichkeit, dem SSH-Befehl anzugeben, dass nur verwendet werden soll bash?

Ich kann die SHELLUmgebungsvariablen am Anfang der Befehlszeile überschreiben

SHELL=/bin/bash ssh [email protected]

Aber mein Ziel ist, dahinter Ansible zu verwenden, daher würde ich gerne die Shell für alle SSH-Verbindungen ersetzen.

Antwort1

Sie können entweder einen alternativen Befehl angeben, der mit beginnt bash -c, oder Ihren Bashismus löschen (nämlich &>die stdout- und stderr-Umleitung).

Das Match execverwendet so etwas wie die system()C-Funktion, daher liegt es am Laufzeitsystem (C-Bibliothek), zu entscheiden, welche Shell es bereitstellt. Auf den meisten Unix-Systemen wird es in sh -cplus die gesamte Befehlszeile übersetzt. Sie können diesen Teil nicht ändern.

verwandte Informationen