Я использую файл конфигурации для своего клиента OpenSSH вместо того, чтобы определить опции в командной строке при необходимости, образце из моего файла конфигурации:
$ cat ~/.ssh/config
----ВЕРХНИЕ ЧАСТИ, ОТРЕДАКТИРОВАННЫЕ ЗДЕСЬ----
Host hmnw
Hostname hmnw.mydomain.com
User myname
Port 60022
IdentityFile ~/.ssh/id_rsa
Когда я пробую к ssh к этому хосту:
$ ssh hmnw
Это не работает.
Но когда я делаю
$ ssh -p 60022 hmnw
Это проходит.
Из любопытства я сделал strace
на этом процессе:
$ ssh hmnw&
$ sudo strace -p $!
connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("XX.XX.XX.XX")}, 16
Я понимаю, что это пытается соединиться с портом SSH по умолчанию 22.
Примечание: Измененный мое фактическое имя хоста и IP-адрес выше.
Что я делаю неправильно?
Моя ssh версия
$ ssh -V
OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g 1 Mar 2016
Добавление этого после предложения @muru
$ ssh -vvvv hmnw
OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /home/myname/.ssh/config
debug1: /home/myname/.ssh/config line 2: Applying options for *
debug1: /home/myname/.ssh/config line 21: Applying options for hmnw
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolving "hmnw.mydomain.com" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to hmnw.mydomain.com [xx.xx.xx.xx] port 22.
Я нашел часть преступника в конфигурации, это - моя ошибка на основе предположения:
Вершина моего ~/.ssh/config
Порт файла
### default for all ##
Host *
ForwardAgent no
ForwardX11 no
ForwardX11Trusted yes
User myname
Port 2222
Protocol 2
ServerAliveInterval 30
ServerAliveCountMax 120
2222
здесь переопределял Порт 60022
, ниже которого принадлежит hmnw
.
я удалил Port 2222
от Host *
, теперь это работает.
Обновление: Согласно предложению @muru, движущаяся конфигурация по умолчанию сверху донизу config
файл позволяет мне использовать пользовательскую запись порта для значения по умолчанию *
, предложение Host * !hmnw
@steeldriver также полезно, у меня еще нет варианта использования для него, но я вижу, что это позволило бы мне инвертировать определенные настройки для конкретного хоста, если бы я должен был.
Кажется, что ssh (на человечности 16.04) не не использует ~/.ssh/config по умолчанию, которые противоречат руководству по клиентская конфигурация OpenSSH , говоря, что
Параметры командной строки имеют приоритет по конфигурационным файлам. Определенный для пользователя конфигурационный файл ~/.ssh/config используется затем. Наконец, глобальный/etc/ssh/ssh_config файл используется. Первое полученное значение для каждого параметра конфигурации будет использоваться.
, В то время как следующие два решения все еще работают:
sudo ssh -F ~/.ssh/config the_name_after_Host
/etc/ssh/ssh_config
(в начале файла) вместо ~/.ssh/config