Ich führe ein Ubuntu-Image in einem Docker-Container aus, wobei mein SSH-Verzeichnis aus meiner nativen MacO-Umgebung bereitgestellt wird.
Meine .ssh / config-Datei enthält
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519_common
Dies funktioniert auf einem Mac einwandfrei, aber AddKeysToAgent und UseKeychain sind für Linux nicht gültig, und alles (z. B. Git), das das openssh-client-Paket verwendet, ignoriert nicht nur die nicht erkannten Anweisungen, sondern schlägt fehl und wird beendet.
Gibt es eine Möglichkeit, eine .ssh / config-Datei zu haben, mit der ich sie für Mac und Linux freigeben kann?
Antworten:
Sie können das
Match
Schlüsselwort in der ssh-Konfigurationsdatei verwenden, um einen Teil der Konfiguration so einzuschränken, dass er nur unter bestimmten Bedingungen angewendet wird . Für den Auszug in der Frage sollte etwa Folgendes funktionieren:Auf einem Linux-System gibt der
grep
Fehler (1) zurück, und die folgenden Zeilen werden ignoriert. Auf dem Mac-Host gibt der grep den Erfolg (0) zurück und dieUseKeychain yes
Zeile wird angewendet.Der
Match
Block wird durch das nächste beendetMatch
,Host
oder das Ende der Datei.Beachten Sie, dass dies
AddKeysToAgent
nicht plattformspezifisch ist, sondern seit Version 7.2 in OpenSSH verfügbar ist. Vermutlich verwenden Sie eine ältere Version von OpenSSH im Ubuntu-Container, jedoch nicht auf dem Mac-Host.quelle
grep -q
hier verwenden?exec
wird ausgeführt, wobei das Standardout auf umgeleitet/dev/null
wird. Ich denke also nicht, dass dies einen Unterschied macht. Aber diese Antwort scheint sowieso nicht zu funktionieren. Es wird sich über die unbekannte Richtlinie beschweren, unabhängig davon, ob dieMatch
Bedingung erfolgreich war oder fehlgeschlagen ist. Darüber hinaus, wenn die Bedingung istMatch exec "sleep 30; exit 19"
, wird es pflichtbewusst 30 Sekunden schlafen, dann beschweren Sie sich über eine unbekannte Anweisung und sterben ;-)Sie sollten die
IgnoreUnknown
Richtlinie frühzeitig in Ihrem~/.ssh/config
:Aus der
ssh_config(5)
Manpage:Bei allen Versionen, die
openssh
ich testen konnte, verhindert eine fehlerhafteMatch
Bedingung nicht, dassssh
Fehler in folgenden Anweisungen auftreten, die ihr unbekannt sind:quelle