В настоящее время у меня есть следующий конфигурационный файл ssh:

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
  IdentityFile           /home/ehud/.ssh/my-secret1.pem

Теперь у меня есть другие машины в той же подсети (172.30. *), Но у них есть другой секретный файл pem. Я хотел бы добавить ту же конфигурацию с другим секретным файлом pem и вызвать ssh с каким-либо флагом, который перенаправит меня в нужный секретный файл.

Является ли это возможным??

Спасибо

1 ответ1

1
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 .

Таким образом, вы можете загрузить совершенно другой конфиг вручную.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .