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

Я использую 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: подключение к droolit.unfuddle.com [174.129.5.196] порт 22. debug1: Соединение установлено. debug1: идентификационный файл /Users/akhkharu/.ssh/id_rsa тип 1 debug1: идентификационный файл /Users/akhkharu/.ssh/id_rsa-cert тип -1
debug1: идентификационный файл /Users/akhkharu/.ssh/id_dsa type 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: соответствие: OpenSSH_5.8 pat OpenSSH*
debug1: включение режима совместимости для протокола 2.0
debug1: строка локальной версии SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT отправлено debug1: SSH2_MSG_KEXINIT получил отладку1: kex: сервер-> клиент aes128-ctr hmac-md5 нет отладка1: kex: клиент-> сервер aes128-ctr hmac-md5 нет отладка1: отправка SSH2_MSG_KEX_ECDH_INIT отладка1: ожидание сервера SSH2_MSG_KEX_YG: RPG: Debug1: ожидающий SSH2_MSG_KEX_YSP: дебит: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-го типа 0
debug1: client_input_channel_req: канал 2 ответ клиента типа eow@openssh.com 2: свободный канал: ответ 2: свободный: debug1 сеанс, 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

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

3 ответа

Ваш * принимающая строфа ловит его. Поставьте более конкретные разделы хоста ранее.

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

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

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

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

Ты можешь попробовать:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none

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

Другие вопросы по тегам