Ускоряем логин через SSH в Ubuntu в 100 раз

    Долгое время я мучился ужасно медленным удаленным логином на свои Ubuntu сервера (все 2 ). Ужасно медленно в данном случае — 2-3 секунды. Не то чтобы это было совсем фатально, но когда логин через ключ — хочется чтобы все работало мгновенно — в конце концов, у нас не 486SX.

    Длительное гугление приводило только к стандартным решениям:
    1. UseDNS no в /etc/ssh/sshd_config — ускоряет логин в случае тормозного DNS. В моём случае стоял локальный кеширующий DNS, потому и так все было быстро.
    2. Принудительное указание IPv4 в SSH клиенте — особо не помогло, видимо не у всех тормозит
    И на askubuntu.com вопрос c bounty уныло провисел долгие недели без ответа…


    Оказалось, используемый нашими дедами для реально полезных задач /etc/motd файл в Ubuntu используется весьма «креативно» — до 10-й версии motd перегенерировался по задаче crontab-а, которая выполняла кучу задач, в том числе и проверку обновлений на сервере canonical (и многое другое). Отключалось через 'update-motd --disable'.

    В 10-й версии это уже так просто не работает, т.к. генерацию motd перенесли в модули PAM, которые выполняются непосредственно в момент логина и отжирают эти самые драгоценные 2-3 секунды времени, пока пользователь в нетерпении смотрит на черное окно терминала. Итак, берем скальпель:

    1. В файлах /etc/pam.d/login и /etc/pam.d/sshd выпиливаем начисто строчки «session optional pam_motd.so»
    2. Сносим нафиг компоненты платного мониторинга, установленные по дефолту:
      aptitude remove landscape-client landscape-common


    После этого можно наконец отредактировать по вкусу /etc/motd

    В /etc/ssh/sshd_config смотрим, есть ли 'PrintMotd yes', если он вам все еще нужен.

    Готово, логин на сервер теперь мгновенный :-)

    PS. А если логинитесь с ключом, то RSA ключ проверяется быстрее чем DSA при равной длине (раза в 4) — и даже на современном железе на ключах от 2048 можно увидеть разницу.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 44

      +6
      Вчера столкнулся когда сервер не получил днс, логин по ssh и запросы mysql по 10 секунд выполнялись
      узнал в про skip-name-resolve и UseDNS no
        +6
        От себя отмечу, что если вы ставите изночально minimal, таких вещей просто нету.
          +1
          Куда то съелась часть. Я имел ввиду UseDNS.
            0
            во-во! другое дело что убунту — это как раз обычно про тех людей что «доков не читали». да и вообще — упоминание о debian .seed файлах я что-то в вики ubuntu не нашёл. а не читая о debian-installer особо и не узнать про опции оного и как он вообще устроен.
              +3
              Кому в убунте нужно детали знать — сразу без вопросов в дебиане читают ;-)
              PS. И склоняете в сторону трололо ;-)
            0
            Спасибо, полезно.
              +1
              спасибо, давно искал решение
                0
                Спасибо! Действительно быстрее вход происходит.
                  +1
                  На обычных машинах и не заметно даже, а на роутере с атомом вымораживает. Надо будет отключить motd
                    +2
                    ControlMaster auto
                    ControlPersist 5m
                    ControlPath ~/.ssh/%r@%h:%p

                    в ~/.ssh/config существенно ускоряют второй и последующие коннекты,
                    только вот ControlPersist появилась относительно недавно
                      0
                      Это насколько я понимаю только для одновременно летящих коннектах…
                        +1
                        Да, и после закрытия последнего готовый мастер будет ещё 5 минут болтаться.
                        Прервать его можно командой ssh host -O exit
                        Ещё очень удобно использовать в скриптах: поднял марстер-коннект, он спросил пароль, а дальше все команды идут мгновенно без аутентификации и авторизации.
                      –7
                      Требую такой смайлик на хабр
                        +9
                        Они вообще не нужны на Хабре. Хабрахабр — не блог Петросяна…
                          +4
                          … но временами его (блог Петросяна) очень напоминает.
                            +2
                            На хабре есть и юмор, в отведенных разделах. Просто везде нужна мера ;-)
                              0
                              Блог петросяна не читал, но смайл этот как замена всяких заунылых , как по-мне.
                              Ну и мне он нравится (не Петросян)
                                +3
                                Смайл — излишество. Лишняя графика не к чему. Я поклонник текстовых смайлов.
                                Естественно, это имхо.
                              +1
                              Смайл зачетный ) Но на хабре обитают люди, которым не влом в своём редакторе текст набивать, с любыми смайликами и фичами на выбор :-)
                              +1
                              Поставь фрю
                              –1
                              Жаль, нельзя два раза карму плюсануть.
                                0
                                Спасибо!
                                  +4
                                  А когда наоборот, логинитесь из ubuntu клиента на solaris сервер, то у себя на ubunte в ~/.ssh/config или в /etc/ssh/ssh_config поставьте GSSAPIAuthentication no, а то тоже будет долго тормозить при входе.

                                  Тоже однажды напоролся (до этого не тормозило, а после какого-то апдейта убунты начало), бесило жутко. Причем на freebsd или linux в этот же момент заходит нормально-моментально, а на Solaris как баран сидишь и смотришь на ворота. Сел, подумал головой (в солярном sshd по умолчанию kerberos есть), выключил в конфиге клиента, залетало.
                                    0
                                    Где-то ещё я на это натыкался, в SUSE, если не ошибаюсь.
                                      0
                                      Запросто может быть. Это логично — в «корпоративных дистрибутивах» наверняка Kerberos включен по умолчанию.
                                      0
                                      в редхате в sshd по дефолту включен GSSAPI authentication, выключаю в sshd_config вместе с UseDNS :)
                                      0
                                      Еще полезно в удаленных конфигах сделать export MOZ_NO_REMOTE=1 на случай запуска firefox удаленно (vnc/x11/etc)
                                        +4
                                        Я думал это защита от брутфорса :)
                                          0
                                          Вопрос:
                                          После ptitude remove landscape-client landscape-common он мне предложил:

                                          Следующие пакеты будут УДАЛЕНЫ:
                                          landscape-common linux-headers-2.6.32-27{u}
                                          linux-headers-2.6.32-27-generic-pae{u} linux-headers-2.6.32-28{u}
                                          linux-headers-2.6.32-28-generic-pae{u} linux-headers-2.6.32-29{u}
                                          linux-headers-2.6.32-29-generic-pae{u}
                                          Он мне предалагет удалить все ядра? Чуть по привычке не читая не нажал Enter…
                                            0
                                            aptitude за собой подтирает. Это старые ядра, ненужные зависимости
                                              +2
                                              Он же не ядра предлагает удалить, а заголовки (-headers).
                                              Наверное, они у Вас в системе просто никому по зависимостям больше не нужн, кроме этих двух landscape- пакетов.
                                              0
                                              Если не сложно, поменяйте таки на apt-get remove, aptitude, я слышал, с какой-то версии зачем-то исключили из дистрибутива, да исключаем ситуацию «aptitude за собой подтирает». Простейший инструмент для простейшей операции.
                                                0
                                                да, apt говорит, зачем он их удаляет:)
                                                +1
                                                У меня на геоде (500 МГц) еще неистово тормозил bash_completion, который неторопясь подсасывается при старте шелла. Рекомендую заправить конфиг на эту тему, если машина слабая.
                                                  0
                                                  ну и command-not-found тоже можно снести тогда, а то одна опечатка и ждешь несколько секунд :)
                                                    0
                                                    Этот, не включенный в базовый набор, лучше просто не ставить. Его никто насильно не тянет, если ставить пакеты с --no-install-recommends
                                                  0
                                                  UseDNS no в /etc/ssh/sshd_config — ускоряет логин в случае тормозного DNS. В моём случае стоял локальный кеширующий DNS, потому и так все было быстро.

                                                  Вот предлагаете решение, а его смысл хоть понимаете?

                                                  UseDNS — Specifies whether sshd(8) should look up the remote host name and check that the resolved host name for the remote IP address maps back to the very same IP address. The default is «yes».
                                                  На самом деле несколько странно, почему эта фича включена по умолчанию. Время авторизации по хостам давно уже минуло.
                                                    0
                                                    И на askubuntu.com вопрос c bounty уныло провисел долгие недели без ответа

                                                      0
                                                      видать, там такие же лентяи, не читают никогда логов, в которых в таких случаях пишется
                                                      reverse mapping checking getaddrinfo for dynamic-ip-190159196205.cable.net.co [190.159.196.205] failed — POSSIBLE BREAK-IN ATTEMPT!
                                                        +1
                                                        ну мапилось бы оно и туда и обратно — что это дает?
                                                        как наличие FQDN у клиента повышает безопасность?
                                                        проверил свою обратную зону — 89-178-207-*.broadband.corbina.ru, прекрасно мапится обратно в айпишник.
                                                          0
                                                          Не у всех мапится. У кого-то хостнейма вообще нет.
                                                          Как влияет — честно говоря, не понятно. :) Разработчики SSH о чём-то своём думали.
                                                            0
                                                            Как я понимаю, влияет только на читаемость и доверие к логам. Если опция включена, в логах нет никаких предупреждений, и есть запись о том, что был логин с www.microsoft.com, то в этом случае вы уже точно уверены, что это кто-то из майкрософта. А без этой опции доверять доменным именам в логах нельзя, потому что реверс можно любой прописать. Надо только IP смотреть.
                                                              0
                                                              ну и плюс можно пускать только конкретных пользователей с конкретных машин по хостнейму. Так часто делают, когда организуют одну точку входа на несколько серверов. Т.е. когда есть какой-то сервер куда можно логинится отовсюду, и кучка серверов, куда — только с первого.

                                                  Only users with full accounts can post comments. Log in, please.