Как ускорить мой слишком медленный вход в SSH?

42

Бег ssh user@hostnameзанимает ~ 30 с. Вот сценарий:

  • это виртуальная машина в локальной сети
  • Windows и Mac машины получают мгновенный вход
  • я использую Debian, и я мог воспроизвести с машиной Ubuntu
  • кто-то, использующий Ubuntu, говорит, что вход в мою машину (локальная сеть) также происходит мгновенно
  • использование IP-адреса хоста занимает примерно половину времени (~ 15 с)

[ обновить ]

Используя ssh -vvv user@hostname, вот где это ждет больше всего:

debug3: authmethod_lookup gssapi-with-mic
debug3: remaining preferred: publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic

И тогда это ждет немного здесь:

debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found

debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
tshepang
источник
1
Вы используете пароль или аутентификацию pubkey? и если пароль, файл id_dsaили id_rsaфайл в вашем ~/.ssh? может быть, ваша установка ssh сначала пытается
выполнить
@ Tobias Я использую пароль, и у меня нет "~/.ssh"файла. Это каталог, и в нем есть только "known_hosts"файл.
tshepang
5
Похоже, у вас есть тайм-аут DNS 15 с. Возможно, сервер выполняет поиск DNS; если вы можете, убедитесь , что у вас есть UseDNS noв sshd_configна сервере. В любом случае, запустите, ssh -vvv user@hostnameчтобы увидеть, где висит логин.
Жиль "ТАК - перестань быть злым"
@ Gil Спасибо. Я обновил вопрос. Я попрошу администратора проверить эту настройку UseDNS .
tshepang
3
@Tshepang: О, вы используете аутентификацию Kerberos (GSSAPI). Я не знаком с этим. Если он неправильно настроен, возможно, это вызывает задержку. Это то, что вы можете спросить у администратора. DNS может быть красная сельдь; это самая распространенная причина в дикой природе, но, возможно, ваша проблема в другом.
Жиль "ТАК - перестань быть злым"

Ответы:

32

Отредактируйте ваш " / etc / ssh / ssh_config " и закомментируйте эти строки:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
Альваро Араос
источник
3
+1 Хороший ответ! (1) Это нормальная скорость для подключения по протоколу ssh, чтобы время мигания курсора было 7 раз? (2) Почему это работает, комментируя GSSAPIAuthentication yesи GSSAPIDelegateCredentials no? @Tshepang
Тим
@Tim (1) это слишком долго ... в зависимости от соединения, я не ожидаю, что это займет более 2 секунд; (2) Я понятия не имею, просто это работает
tshepang
1
Значение по умолчанию для GSSAPIAuthentication в большинстве версий OpenSSH - «нет», но некоторые дистрибутивы устанавливают «да» в файлах sshd_config и ssh_config. Если он вам не нужен / не используется, он замедляет установление соединения / аутентификацию.
Тгарольд
Если используется аутентификация LDAP / AD, не приведет ли отключение GSSAPI к простой привязке, что может привести к отправке паролей по сети в виде открытого текста?
Шеннон
Убедитесь, что все серверы имен все еще существуют в /etc/resolv.conf. Если они этого не делают, уберите их. Это решило мою проблему.
технократ
30

У меня была эта проблема, и я решил ее, отключив Обратное разрешение DNS в SSH.

Так что sshd_configна сервере измените это:

 #UseDNS yes

к этому:

UseDNS no
Earlz
источник
1
Я сделал изменение (хотя у меня не было закомментированной опции UseDNS ), перезагрузил мой ssh-сервер, и все еще та же проблема.
Чепанг
2
@ Че хм, странно. Единственные проблемы со скоростью, которые у меня когда-либо были с SSH, были из-за этого.
Earlz
1
Я был настроен скептически, когда использую IP-адрес (домашняя локальная сеть), но это решение помогло решить мою проблему. Ради Google, хотя это происходило сразу после этого, задержка не имела ничего общего с сообщением «key: /home/mylogin/.ssh/id_ecdsa ((nil))» (при запуске ssh -vvv).
Скиппи ле Гран Гуру
7

Вы проверили настройки DNS?

Попробуйте настройку mdns offв /etc/host.conf.

Это отключает разрешение MDN и мне очень помогло.

РЕДАКТИРОВАТЬ:

Кажется, Gentoo справляется с этим немного иначе. Чтобы отключить многоадресный поиск DNS, вы должны изменить файл /etc/nsswitch.conf.
Там должно быть что-то вроде:

hosts:          files mdns

Измените это на:

hosts:          files dns
Кристиан
источник
+1 хорошая идея. @Tshepang быстрее ли подключается ssh, когда вы напрямую используете IP-адрес имени хоста?
Тобиас Кинцлер
@tobias занимает вдвое меньше времени
tshepang
Я получаю /etc/host.conf: line 2: bad command mdns off'`, когда я бегу ssh user@hostname.
tshepang
Похоже, это устаревший параметр, так как glibc 2.3.x (2006): forums.gentoo.org/viewtopic-t-476558-highlight-mdns.html . Что вы используете (ОС, глик версия)?
Чепанг
1
Вы говорите, что это займет только половину времени, когда вы используете IP-адрес. Это означает, что у вас есть проблема с разрешением вашего имени (IP => FQDN или FQDN => IP). Поэтому сначала взгляните на конфигурацию DNS, а затем попытайтесь выяснить, есть ли у вас проблемы с ssh или нет.
Кристиан
3

Добавление имени хоста /etc/hostsможет иногда решить эту проблему.

Дон маклахлан
источник
Работает для одного имени хоста, но решение Earlz является более общим (и устраняет ту же проблему).
Скиппи ле Гран Гуру
1

Также проверьте, если nscdустановлен и работает.

Отсутствие DNS-кэша может увеличить время, необходимое для разрешения записи PTR (при условии, что клиент ssh выполняет обратный поиск DNS для IP-адреса сервера)

altmas5
источник
0

У меня такая же проблема в среде Windows 2008 R2, но «useDNS no» не работает.

Я пытаюсь добавить в файл hosts IP-адрес и хост подключающегося сервера, и он быстрее на 30 сек. Что заставляет меня думать, что разрешение может быть в DNS.

Я пытаюсь добавить DNS-серверы, но это не решает проблему.

У моего сервера есть два DNS суффикса. 1 для корпоративного домена, к которому принадлежит сервер (domain.com), а другой для его внешнего интерфейса, подключенного к частной сети (domain.net).

Порядок суффикса DNS: сначала domain.net, затем domain.com next

Мои SFTP / SSH клиенты находятся в корпоративном домене. Кстати проблемные клиенты из корпоративного домена.

Что работает для меня, так это то, что сначала я делаю domain.com, а затем domain.net

Задержка соединения 2 м30 раньше стала только 3-4 с.

Эрик Арпон
источник