У меня есть ситуация, когда мне нужно получить доступ к одному и тому же хосту 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) получает данные конфигурации из следующих источников в следующем порядке:
- параметры командной строки
- файл конфигурации пользователя (~ / .ssh / config)
- общесистемный файл конфигурации (/ etc / ssh / ssh_config)
Для каждого параметра будет использоваться первое полученное значение. Файлы конфигурации содержат разделы, разделенные спецификациями «Хост», и этот раздел применяется только для хостов, которые соответствуют одному из шаблонов, указанных в спецификации. Соответствующее имя хоста - это имя, указанное в командной строке.
Поскольку используется первое полученное значение для каждого параметра, более специфичные для хоста объявления должны быть даны в начале файла, а общие значения по умолчанию - в конце.