ssh -i '/home/ehud/.ssh/my-secret2.pem' …
ssh -o 'IdentityFile=/home/ehud/.ssh/my-secret2.pem' …
Любая из вышеперечисленных команд сначала загрузит файл my-secret2.pem
, но, поскольку вы можете указать несколько файлов идентификаторов (см. Параметр man 1 ssh
, -i
), файл my-secret1.pem
указанный в вашем ssh_config
, возможно, также будет опробован. , Вы можете или не можете этого хотеть.
Если вы согласны с этим, вы можете указать my-secret2.pem
через ssh_config
, добавив следующий фрагмент перед Host 172.30.*
вас уже есть:
# Special hosts, new identity file.
Host 172.30.10.*
IdentityFile /home/ehud/.ssh/my-secret2.pem
man 5 ssh_config
говорит:
Для каждого параметра будет использоваться первое полученное значение. Файлы конфигурации содержат разделы, разделенные спецификациями Host
, и этот раздел применяется только для хостов, которые соответствуют одному из шаблонов, приведенных в спецификации. Соответствующее имя хоста - это имя, указанное в командной строке.
Поскольку для каждого параметра используется первое полученное значение, в начале файла должны быть приведены более специфичные для хоста объявления, а в конце общие значения по умолчанию.
Для любого параметра, который можно указать только один раз, будет достаточно сначала сопоставить специальные хосты, а затем весь 172.30.*
. Это не очевидно, но "первое полученное значение будет использовано" на самом деле не относится к IdentityFile
поскольку вы можете указать несколько файлов. Чтобы ваши специальные хосты не использовали файл my-secret1.pem
, вам необходимы дополнительные знания восклицательного знака (!
) использование.
Пример фрагмента из 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
Теперь, если вы, например, ssh -v 172.30.10.22
(специальный хост), вы увидите что-то вроде:
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.*
и ssh -v 172.30.99.33
(нестандартный хост) напечатает:
debug1: /etc/ssh/ssh_config line Y: Applying options for 172.30.*
debug1: /etc/ssh/ssh_config line Z: Applying options for 172.30.*
Так или иначе, будет использоваться только один файл .pem
.
Также есть опция -F
для ssh
. От man 1 ssh
:
-F configfile
Определяет альтернативный файл конфигурации для каждого пользователя. Если в командной строке указан файл конфигурации, системный файл конфигурации (/etc/ssh/ssh_config
) будет проигнорирован. По умолчанию для файла конфигурации для каждого пользователя используется ~/.ssh/config
.
Таким образом, вы можете загрузить совершенно другой конфиг вручную.