Вопрос: Как я могу применить некоторые настройки к хостам ssh, исключая один другой хост?


У меня есть относительно полная настройка для моего ~/.ssh/config, Это то, что наверху:

Host *
   ControlMaster auto
   ControlPath /tmp/ssh_mux_%h_%p_%r
   ControlPersist 24h
   BatchMode yes
   Ciphers blowfish-cbc
   Compression yes
   VisualHostKey yes

Я хочу сделать так, чтобы ControlMaster и т. д. не относятся к github; Oни по-видимому, активно отключать эти постоянные соединения, которые я понимаю и уважение.

Чтобы было ясно:

 $ rm /tmp/ssh_mux_*
 $ ssh git@github.com
   PTY allocation request failed
   Hi frioux! You've successfully authenticated, but GitHub does not provide shell access.
   Shared connection to github.com closed.

 $ ls /tmp/ssh_mux_*
   /tmp/ssh_mux_github.com_22_git

Поэтому я прочитал несколько документов, я спросил в IRC, и это то, что у меня получилось:

Host !github.com
   ControlMaster auto
   ControlPath /tmp/ssh_mux_%h_%p_%r
   ControlPersist 24h

Host *
   BatchMode yes
   Ciphers blowfish-cbc
   Compression yes
   VisualHostKey yes

Итак, теперь github правильно не использует ControlMaster:

 $ rm /tmp/ssh_mux_*
 $ ssh git@github.com
   Host key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
   +--[ RSA 2048]----+
   |        .        |
   |       + .       |
   |      . B .      |
   |     o * +       |
   |    X * S        |
   |   + O o . .     |
   |    .   E . o    |
   |       . . o     |
   |        . .      |
   +-----------------+

   PTY allocation request failed
   Hi frioux! You've successfully authenticated, but GitHub does not provide shell access.
   Shared connection to github.com closed.

 $ ls /tmp/ssh_mux_*

Но ничто другое:

 $ rm /tmp/ssh_mux_*
 $ ssh cs ls
   Host key fingerprint is 89:d1:40:7f:0d:11:28:10:ce:23:e6:a9:12:9d:a1:5b
   +--[ RSA 2048]----+
   |    o+o  .+o     |
   |   o  .+.  o     |
   |  + + ..o . .    |
   | = = . o o       |
   |o E   . S        |
   | =               |
   |+                |
   |.                |
   |                 |
   +-----------------+

   /home/frew
   bin
   code
   irclogs
   lib
   out
   test

 $ ls /tmp/ssh_mux_*

Я попытался сделать линию хоста Host !github.com, * а также Host *, !github.com но насколько я могу судить, когда я это делаю, это всегда относится к github.

Как я могу делать то, что хочу?


2
2018-03-22 16:45


Источник




Ответы:


Шаблоны после Host разделены пробелами, а не запятыми, поэтому это должно работать:

Host * !github.com
    ControlMaster auto
    ControlPath /tmp/ssh_mux_%h_%p_%r
    ControlPersist 24h

4
2018-03-22 19:03





rudi_s на IRC помог мне придумать решение:

Host github.com
   ControlMaster  no
   ControlPath    no
   ControlPersist no

Host *
   ControlMaster auto
   ControlPath /tmp/ssh_mux_%h_%p_%r
   ControlPersist 24h
   BatchMode yes
   Ciphers blowfish-cbc
   Compression yes
   VisualHostKey yes

2
2018-03-22 17:59



Причина этого в том, что записи Host <match> обрабатываются по порядку, поэтому используется первая соответствующая запись. Я не знаком с шаблоном! <Hostname>, поэтому не могу точно сказать, почему он не работает. Я предполагаю, что это может быть функция, более новая, чем ваш клиент SSH. - Slartibartfast
В то время как это работает, другой ответ - это то, что я пытался, и заканчиваю более сжатым решением, поэтому я буду отмечать его как правильное. - Frew Schmidt