Подстановочный знак конфигурации SSH на расширенном имени хоста

25

Я хочу иметь подстановочный знак в моей конфигурации SSH, чтобы установить для моего имени пользователя по умолчанию определенное значение для всех хостов в определенном домене. Но я также хочу иметь несколько коротких имен для некоторых конкретных хостов. Я ожидал что-то вроде этого, чтобы работать:

Host *.mydomain.com
    User myusername
Host host1
    Hostname host1.mydomain.com

С этими настройками, если я набираю, ssh host1.mydomain.comон оценивается как myusername@host1.mydomain.com, но если я набираю, ssh host1он не применяет мои настройки пользователя, и вместо этого я вижу mylocalusername@host1.mydomain.com.

Можно ли сопоставить символы подстановки в окончательном расширенном имени хоста, чтобы я мог набрать короткую или длинную форму и получить те же результаты?

Му Разум
источник
Что делать, если вы измените порядок, ставя раздел подстановки на втором месте.
Esmit
Ты пробовал это? Я почти уверен, что вы получите правильное имя пользователя с неправильным доменом, во всяком случае.
Mu Mind
Я не пробовал это, поэтому я сделал ответ комментария как кое-что, чтобы попробовать, вместо ответа downvotable.
Esmit

Ответы:

13

Просто используйте:

Host *.mydomain.com host1
User myusername

Host host1
Hostname host1.mydomain.com
  • Альтернативные шаблоны поставляются пробелом-разделителем в строке хоста .
  • Все соответствующие шаблоны хостов применяются.
  • Если опция встречается несколько раз, используется только 1-й случай

источник
3
Это экономит немного по крайней мере, набрав. Похоже, вы не знаете, как избежать дублирования информации о домене?
Mu Mind
Было бы здорово, если бы SSH мог просто попытаться добавить домен по умолчанию, то есть "lan" или "mycompany.com", вместо того, чтобы жестко кодировать его в файле конфигурации.
Saustrup
18

Вы можете просто установить CanonicalizeHostnameдля yesобработки ssh_config каноническим именем хоста вашего псевдонима. Например:

CanonicalizeHostname yes
Host *.mydomain.com
    User myusername

Host host1
    HostName host1.mydomain.com

В качестве альтернативы, если вы также хотите переназначить имена хостов, вы можете использовать Matchвместо того, Hostчтобы сопоставлять только канонические имена хостов. Например, в:

Match canonical host="*.mydomain.com"
    User myusername

Host host2.mydomain.com
    HostName host2.otherdomain.com

Пользовательская директива не будет установлена ​​при подключении к host2.mydomain.com.

Таймс-сквер
источник
Обратите внимание, что все еще существуют старые версии ssh, которые не поддерживают эти опции - если вы столкнетесь с одной из них, как и я, решение Host будет работать.
Кирстеллайн
2

Использование CanonicalDomains также будет работать.

CanonicalizeHostname yes
CanonicalDomains mydomain.com

Host *
User myusername

Если вы хотите иметь краткое имя для конкретного хоста, например:

Host h
Hostname host1

Однако я бы не рекомендовал такое короткое имя.

Джекоб
источник
1

Вы можете использовать% h.mydomain.com в вашем .ssh / config.


 Host host?
 User myusername
 Hostname %h.mydomain.com

Host host?? User myusername Hostname %h.mydomain.com

Host host??? User myusername Hostname %h.mydomain.com

Теперь вы можете сделать:

SSH хост1
вместо того
ssh host1.mydomain.com
SSH хост10
вместо того
ssh host10.mydomain.com
и ssh host100

С уважением, Берт

Берт де Риддер
источник