ssh -i '/home/ehud/.ssh/my-secret2.pem' …
ssh -o 'IdentityFile=/home/ehud/.ssh/my-secret2.pem' …
Jede der oben genannten Befehle lädt my-secret2.pem
Datei zuerst, aber da können Sie mehrere Identitätsdateien angeben (siehe man 1 ssh
, -i
Option), wird die Datei my-secret1.pem
angegeben in Ihrem ssh_config
Willen möglicherweise auch versucht werden. Sie können oder können dies nicht wollen.
Wenn Sie damit einverstanden sind, können Sie my-secret2.pem
via angeben, ssh_config
indem Sie vor dem bereits vorhandenen Host 172.30.*
Block das folgende Snippet hinzufügen :
# Special hosts, new identity file.
Host 172.30.10.*
IdentityFile /home/ehud/.ssh/my-secret2.pem
man 5 ssh_config
sagt:
Für jeden Parameter wird der erste erhaltene Wert verwendet. Die Konfigurationsdateien enthalten durch Host
Spezifikationen getrennte Abschnitte. Dieser Abschnitt wird nur für Hosts angewendet, die einem der in der Spezifikation angegebenen Muster entsprechen. Der übereinstimmende Hostname ist der in der Befehlszeile angegebene.
Da der erste ermittelte Wert für jeden Parameter verwendet wird, sollten am Anfang der Datei weitere hostspezifische Deklarationen und am Ende allgemeine Standardwerte angegeben werden.
Für jeden Parameter, der nur einmal angegeben werden kann, ist es ausreichend, zuerst bestimmte Hosts und später den gesamten 172.30.*
Bereich zuzuordnen. Es ist nicht offensichtlich, aber "der erste erhaltene Wert wird verwendet" trifft nicht wirklich zu, IdentityFile
da Sie mehrere Dateien angeben können. Damit Ihre speziellen Hosts die Datei nicht verwenden my-secret1.pem
, benötigen Sie zusätzliche Kenntnisse über die Verwendung von Ausrufezeichen ( !
).
Beispiel-Snippet von ssh_config
:
# Special hosts, new identity file.
Host 172.30.10.*
IdentityFile /home/ehud/.ssh/my-secret2.pem
# Non-special hosts, old identity file.
Host 172.30.* !172.30.10.*
IdentityFile /home/ehud/.ssh/my-secret1.pem
# Special and non-special hosts, like in your old config.
# Note there is no IdentityFile line here anymore.
# If there was, it would apply to special and non-special
# hosts, despite some previous IdentityFile line alrady loaded.
Host 172.30.*
ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ServerAliveInterval 60
TCPKeepAlive yes
ProxyCommand ssh -i /home/ehud/.ssh/my-secret1.pem -q -A ubuntu@some.public.ip nc %h %p
ControlMaster auto
ControlPath ~/.ssh/mux-%r@%h:%p
ControlPersist 8h
User ubuntu
Nun, wenn Sie zB ssh -v 172.30.10.22
(spezieller Gastgeber), sehen Sie etwas wie:
debug1: /etc/ssh/ssh_config line X: Applying options for 172.30.10.*
debug1: /etc/ssh/ssh_config line Y: Skipping Host block because of negated match for 172.30.10.*
debug1: /etc/ssh/ssh_config line Z: Applying options for 172.30.*
und ssh -v 172.30.99.33
(nicht spezieller Host) drucken:
debug1: /etc/ssh/ssh_config line Y: Applying options for 172.30.*
debug1: /etc/ssh/ssh_config line Z: Applying options for 172.30.*
So oder so wird nur eine .pem
Datei verwendet.
Es gibt auch eine -F
Option für ssh
. Von man 1 ssh
:
-F configfile
Gibt eine alternative Konfigurationsdatei pro Benutzer an. Wenn in der Befehlszeile eine Konfigurationsdatei angegeben ist, wird die systemweite Konfigurationsdatei ( /etc/ssh/ssh_config
) ignoriert. Die Standardeinstellung für die benutzerspezifische Konfigurationsdatei lautet ~/.ssh/config
.
Auf diese Weise können Sie eine völlig andere Konfiguration von Hand laden.
multiple users
als ob Sie etwas mit demUser
Parameter machen wollten ; aber der Körper Ihrer Frage schlägt vor, dass es ungefähr istIdentityFile
. Ich hoffe ich habe dich richtig verstanden und meine Antwort ist nützlich.