Ich habe also eine SSH-Konfigurationsdatei für meinen Benutzer, der Match exec
sie 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 -c
wä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 SHELL
Umgebungsvariablen 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 exec
verwendet 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 -c
plus die gesamte Befehlszeile übersetzt. Sie können diesen Teil nicht ändern.