OpenSSH отключить ControlMaster для данного имени хоста

20

Я использую OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011с Mac OS X Snow Leopard. У меня есть ControlMasterфункция, настроенная для поддержания постоянных соединений. У меня ~/.ssh/configесть следующее:

Host *
  ControlPath /ms/%r@%h:%p
  ControlMaster auto
  ControlPersist 4h

Host *.unfuddle.com
  ControlMaster no

Однако из того, что я вижу, - даже когда я пытаюсь использовать SSH для хостов unfuddle.com, всегда создается главное соединение:

[andrey-mbp ~] $ ssh -v git@droolit.unfuddle.com
OpenSSH_5.9p1, OpenSSL 0.9.8r 8 февраля 2011 г.
debug1: чтение данных конфигурации /Users/akhkharu/.ssh/config
debug1: /Users/akhkharu/.ssh/config строка 1: применение параметров для *
debug1: /Users/akhkharu/.ssh/config строка 6: применение параметров для * .unfuddle.com
debug1: чтение данных конфигурации /usr/local/Cellar/openssh/5.9p1/etc/ssh_config
debug1: auto-mux: пробует существующий мастер
debug1: управляющий сокет "/ms/git@droolit.unfuddle.com:22" не существует
debug1: подключение к порту 22 droolit.unfuddle.com [174.129.5.196].
debug1: соединение установлено.
debug1: файл идентификации /Users/akhkharu/.ssh/id_rsa тип 1
debug1: файл идентификации /Users/akhkharu/.ssh/id_rsa-cert тип -1
debug1: файл идентификации /Users/akhkharu/.ssh/id_dsa тип 2
debug1: файл идентификации /Users/akhkharu/.ssh/id_dsa-cert тип -1
debug1: файл идентификации /Users/akhkharu/.ssh/id_ecdsa тип -1
debug1: файл идентификации /Users/akhkharu/.ssh/id_ecdsa-cert тип -1
debug1: удаленный протокол версии 2.0, удаленная версия программного обеспечения OpenSSH_5.8
debug1: match: OpenSSH_5.8 pat OpenSSH *
debug1: включение режима совместимости для протокола 2.0
debug1: строка локальной версии SSH-2.0-OpenSSH_5.9
debug1: отправлено сообщение SSH2_MSG_KEXINIT
debug1: SSH2_MSG_KEXINIT получено
debug1: kex: сервер-> клиент aes128-ctr hmac-md5 нет
debug1: kex: клиент-> сервер aes128-ctr hmac-md5
debug1: отправка SSH2_MSG_KEX_ECDH_INIT
debug1: ожидается SSH2_MSG_KEX_ECDH_REPLY
debug1: ключ хоста сервера: RSA a6: 74: 33: 36: 95: 31: 6e: a6: d7: 71: 87: b8: 3c: 38: e2: 60
debug1: Хост droolit.unfuddle.com известен и соответствует ключу хоста RSA.
debug1: найден ключ в /Users/akhkharu/.ssh/known_hosts:390
debug1: ssh_rsa_verify: подпись верна
debug1: отправлено сообщение SSH2_MSG_NEWKEYS
debug1: ожидается SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS получено
debug1: роуминг не разрешен сервером
debug1: SSH2_MSG_SERVICE_REQUEST отправлено
debug1: SSH2_MSG_SERVICE_ACCEPT получено
debug1: аутентификации, которые могут продолжаться: publickey
debug1: следующий метод аутентификации: publickey
debug1: предложение открытого ключа RSA: /Users/akhkharu/.ssh/id_rsa
debug1: сервер принимает ключ: pkalg ssh-rsa blen 277
debug1: аутентификация прошла успешно (publickey).
Аутентифицирован на droolit.unfuddle.com ([174.129.5.196]: 22).
debug1: настройка мультиплексного мастер-сокета
debug1: канал 0: новый [/ms/git@droolit.unfuddle.com:22]
debug1: control_persist_detach: фоновый мастер-процесс
debug1: переход в фоновый режим
debug1: вход в интерактивный сеанс.
debug1: мультиплексирование управляющего соединения
debug1: канал 1: новый [управление мультиплексором]
debug1: канал 2: новый [клиент-сессия]
debug1: Remote: принудительная команда.
debug1: Remote: переадресация портов отключена.
debug1: Remote: пересылка X11 отключена.
debug1: Remote: переадресация агента отключена.
debug1: Remote: распределение Pty отключено.
debug1: Remote: принудительная команда.
debug1: Remote: переадресация портов отключена.
debug1: Remote: пересылка X11 отключена.
debug1: Remote: переадресация агента отключена.
debug1: Remote: распределение Pty отключено.
debug1: mux_client_request_session: основной идентификатор сеанса: 2
Запрос на выделение PTY не выполнен
Нужно SSH_ORIGINAL_COMMAND
debug1: client_input_channel_req: канал 2 rtype ответ о состоянии выхода 0
debug1: client_input_channel_req: канал 2 rtype eow@openssh.com ответ 0
debug1: канал 2: свободный: клиент-сессия, nchannels 3
debug1: канал 1: свободный: управление мультиплексором, nchannels 2
Совместное подключение к droolit.unfuddle.com закрыто.
[andrey-mbp ~] $ ll / мс /
всего 0
srw ------- 1 akhkharu admin 0B 17 июля 11:55 git@droolit.unfuddle.com: 22

Спасибо,
Андрей.

Андрей Черных
источник

Ответы:

19

Ваш *ведущий раздел ловит его. Поместите более конкретные разделы хоста ранее.

Игнасио Васкес-Абрамс
источник
Спасибо, но это не сработает для меня. Мне нужен ControlMaster для всех хостов, но не для unfuddle.com. Я не могу перечислить все хосты, которые я использую в конфигурационном файле. То, что, кажется, работает, помещает правило для unfuddle.com в самом начале.
Андрей Черных
8
Вы имеете в виду ... когда вы поставили более конкретную строфу хоста раньше?
Игнасио Васкес-Абрамс
Да, это странно, но это работает.
Андрей Черных
Я искал manpages целую вечность, но это странная приоритетная вещь!
JanKanis
1
Боюсь, что до самого последнего дня я буду удивляться, поймал ли Андрей тот факт, что этот ответ правильный, и что комментарий, с которым он согласен, указывает на это.
высокого уровня
10

Как описано в ответе на мой похожий вопрос о SuperUser , вы можете использовать синтаксис «взрыва» для исключения определенных хостов из исходного Host *раздела, например:

Host * !*.unfuddle.com
    ControlPath /ms/%r@%h:%p
    ControlMaster auto
    ControlPersist 4h

В моей ситуации я обнаружил, что порядок Hostразделов при использовании a Host *кажется несоответствующим, но описанный выше метод всегда работает.

Скотт Дадли
источник
5

Для меня это работает , когда я дополнительно установить ControlPathв noneпределах hostстрофы.

Можешь попробовать:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none

Тогда сессия управления не будет сгенерирована.

Тим Вейперт
источник
В моем случае я должен был сделать это плюс поместить Host *раздел в конец файла, и это сработало.
3