SSH: файл конфигурации не использовал, как я ожидал

Я недавно обновил от Надежного человека (14.04) к Гостеприимному (16.04), и у меня теперь есть другое поведение при использовании ssh и мой .ssh/config файл.

Ранее: в файле конфигурации, когда первое правило применялось бы на хост a изменить цель Hostname от a кому: b, и другое правило применялось бы на b, второе правило было бы применено.

Теперь: только первое правило применяется, второй проигнорирован.

Вот образец этого нового поведения:

# I added two extra names for "127.0.0.1" :
legec@Workstation[.ssh]$ head -2 /etc/hosts
127.0.0.1   localhost
127.0.0.1   foo foo.homesweethome.com

# config file :
legec@Workstation[.ssh]$ cat ~/.ssh/config
# this rule expands "foo" to "foo.homesweethome.com"
Host foo
    Hostname foo.homesweethome.com

# this rule sets default port and user for "foo.homesweethome.com" :
Host foo.homesweethome.com
    Port 2222
    User foobar

# when running ssh :    
legec@Workstation[.ssh]$ ssh -v foo
OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016
  # as you can see in the following two lines,
  # the first config rule is applied
debug1: Reading configuration data /home/legec/.ssh/config
debug1: /home/legec/.ssh/config line 1: Applying options for foo
  # the second rule is skipped
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to foo.homesweethome.com [127.0.0.1] port 22.
debug1: Connection established.

  [.. extra debug messages about possible keys to present, protocol setup ... ]

debug1: Next authentication method: password
# I was hoping to see a connection on port 2222,
# and asking the password for user foobar :
legec@foo.homesweethome.com's password: 

Текущая версия моего ssh lib:

legec@Workstation[.ssh]$ ssh -V
OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016

[редактирование]: Поскольку fkraeim напомнил мне, версии OpenSSH в Надежном человеке (14.04) был 6.6.

Вопросы

  • Что изменилось в поведении ssh?
  • Как у меня могут быть оба правила, применяются в вышеупомянутом примере?

Примечание: для более полного контекста, в моем реальном файле конфигурации, конфигурация похожа:

Host bar baz
    Hostname %h.homesweethome.com

Host foo
    Hostname foo.homesweethome.com

Host *.homesweethome.com
    User foobar
    Port 2222
2
задан 15 December 2017 в 13:19

2 ответа

Это хорошая иллюстрация, что иногда, ошибка человека является функцией другого человека...

Это поведение OpenSSH в 14,04 является на самом деле ошибкой, представленной в OpenSSH 6.6 (который является версией в Ubuntu 14.04), и зафиксированный в 6,8 (см. также журнал изменений). Корректный способ сделать, что Вы хотите,

Host bar baz
    Hostname %h.homesweethome.com

Host foo
    Hostname foo.homesweethome.com

Host foo bar baz *.homesweethome.com
    User foobar
    Port 2222

С другой стороны, возможно, канонизация действительно, что Вы хотите... Например,

CanonicalizeHostname yes
CanonicalDomains homesweethome.com

Host *.homesweethome.com
    User foobar
    Port 2222

... мог работать на Вас. Различие с Вашей текущей конфигурацией - это если, например, goo.homesweethome.com существует, ssh goo попытается соединиться с ним.

7
ответ дан 2 December 2019 в 01:28

Я не знаю то, что изменилось между 14,04 и 16.04, но CanonicalizeHostnames опция, кажется, играет роль. От man ssh_config:

CanonicalizeHostname
 Controls whether explicit hostname canonicalization is performed.
 The default, “no”, is not to perform any name rewriting and let
 the system resolver handle all hostname lookups.  If set to “yes”
 then, for connections that do not use a ProxyCommand, ssh(1) will
 attempt to canonicalize the hostname specified on the command
 line using the CanonicalDomains suffixes and
 CanonicalizePermittedCNAMEs rules.  If CanonicalizeHostname is
 set to “always”, then canonicalization is applied to proxied
 connections too.

 If this option is enabled, then the configuration files are
 processed again using the new target name to pick up any new
 configuration in matching Host and Match stanzas.

Отметьте последний абзац. И когда я добавляю:

Host *
  CanonicalizeHostname yes

Я получаю ожидаемый результат:

$ ssh foo                
ssh: connect to host foo.homesweethome.com port 2222: Connection refused
3
ответ дан 2 December 2019 в 01:28

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

Похожие вопросы: