Назад | Перейти на главную страницу

Измените ssh ControlPath с объявлением для конкретного хоста

У меня есть ситуация, когда мне нужно получить доступ к одному и тому же хосту SSH (GitHub) с двумя разными ключами SSH. Это не проблема, и я могу легко настроить его, используя псевдоним имени хоста. Проблема возникает, когда эта конфигурация сочетается с моей конфигурацией мультиплексирования SSH. Кажется, я не могу переопределить свой ControlPath по умолчанию с помощью объявления для конкретного хоста.

Может так оно и работает? Может это ошибка? Я делаю что-то неправильно?

Кстати, у меня Mac 10.7.

Вот мой конфиг:

Host *
  ControlMaster auto 
  ControlPath ~/.ssh/connections/ssh-%r@%h:%p

Host github.com-X
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa_X
  IdentitiesOnly yes 
  ControlPath ~/.ssh/connections/ssh-%r@%h-X:%p

Host github.com
  TCPKeepAlive yes
  ServerAliveInterval 60
  ControlPersist 1h

Я немного повозился, но мне кажется, что я всегда получаю ControlPath, как указано в объявлении Host *.

ssh -T git@github.com-X

Регистрирует меня как правильный пользователь с помощью id_rsa_X, но здесь создается сокет домена:

~/.ssh/connections/ssh-git@github.com:22

Скорее, чем:

~/.ssh/connections/ssh-git@github.com-X:22

Итак, позже, когда я пытаюсь выполнить команду SSH с помощью id_rsa, я получаю пользователя id_rsa_X из-за мультиплексирования соединений. Другими словами:

ssh -T git@github.com

Дает мне приветственное сообщение для пользователя с ключом id_rsa_X.

Любые идеи?

EDIT: ответ на комментарий vgoff - Нет, похоже, он читает всю мою конфигурацию ...

$ ssh -vT git@github.com-X
OpenSSH_5.6p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/<username>/.ssh/config
debug1: Applying options for *
debug1: Applying options for github.com-X
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/<username>/.ssh/connections/ssh-git@github.com:22" does not exist
<snip>

Вы можете видеть, что он прочитал все настройки и пытается использовать неправильный ControlPath.

Вам нужно переместить менее конкретные параметры ниже в ~/.ssh/config. В Host * параметры применяются первыми, и они не перезаписываются более поздними, конфликтующими параметрами, даже если они более конкретны. Новые параметры, не указанные в Host * однако будет применен, и я думаю, что это то, что вы видели в своем журнале.

Источник: http://linux.die.net/man/5/ssh_config

ssh (1) получает данные конфигурации из следующих источников в следующем порядке:

  1. параметры командной строки
  2. файл конфигурации пользователя (~ / .ssh / config)
  3. общесистемный файл конфигурации (/ etc / ssh / ssh_config)

Для каждого параметра будет использоваться первое полученное значение. Файлы конфигурации содержат разделы, разделенные спецификациями «Хост», и этот раздел применяется только для хостов, которые соответствуют одному из шаблонов, указанных в спецификации. Соответствующее имя хоста - это имя, указанное в командной строке.

Поскольку используется первое полученное значение для каждого параметра, более специфичные для хоста объявления должны быть даны в начале файла, а общие значения по умолчанию - в конце.