Сказ о том, как установить OpenSSH 6 из исходников на удаленный сервер с CentOS 5.8

2 minute read

Многим известен консервативный подход разработчиков RadHat и CentOS к обновлению пакетов. Но, как известно, в старых версиях ПО находят новые дыры в безопасности, что совершенно недопустимо для серверов. В CentOS 5.x установлен OpenSSH версии 4.3. Наша задача - обновить его до последней доступной версии.

Можно попробовать найти нужный rpm пакет, но в таком случае, с большой вероятностью, возможности версии Вашей ОС не удовлетворят запросы паке. Обновиться до последней версии можно только собирая пакет руками.

Screenshot from 2014-02-10 09:13:50

Для начала нам потребуются несколько пакетов:

yum install gcc make openssl-devel pam-devel screen

Дальше скачиваем пакет для установки, распаковываем его:

wget ftp://ftp3.usa.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.6p1.tar.gz  
tar xvf openssh-6.4*.gz  
cd openssh-6.4p1

Перед сборкой я бы советовал скачать доступную версию OpenSSH из репозитариев. Для этого нужно доставить необходимый пакет:

yum -y install yum-utils.noarch

Скачать OpenSSH server:

yumdownloader openssh-server

Для себя я выбрал вот такие параметры конфигурации:

  • конфигурационные файлы будут храниться в /etc/sshd/
  • бинарники будут лежать в /usr/bin/
  • по умолчанию включаю поддержку ipv4
  • так же нужна поддержка кэшированых паролей и pam авторизация
    ./configure -sysconfdir=/etc/sshd/ -bindir=/usr/bin/ -sbindir=/usr/sbin/ -with-ipv4-default -with-md5-passwords -with-pam
    

Удаляем текущую версию OpenSSH. С этого места активная ssh сессия - единственная соломинка, которая связывает Вас и Ваш сервер. Если что-то пойдет не так - подключиться к серверу Вы не сможете. Хорошо, если есть сапорт в который можно позвонить.

yum remove openssh-server

Компилим и ставим OpenSSH:

make
make install

Копируем скрипт запуска в нужное место:

cp contrib/redhat/sshd.init /etc/init.d/sshd

Если Вы подключитесь к серверу под именем root, тогда включите эту опцию принудительно в конфигурационном файле: (раскомментировать PermitRootLogin yes в /etc/sshd/sshd_config)

При запуске sshd ругается на отсутствие файла сертификата. Для этого нужно в init.d скрипте (/etc/init.d/sshd) закомментировать следующую строчку

/etc/ssh/ssh_host_ecdsa_key.pub

Уносим в сторону старую папку ssh и делам симлинк с новой:

mv /etc/ssh /etc/ssh.bak && ln -s /etc/sshd /etc/ssh

Ставим демон на автозагрузку:

chkconfig sshd -add  
chkconfig sshd on

Вам уже чешутся руки запустить новый ssh? Я рекомендую остановить его и запустить за ново, вместо команды restart.

Когда я сделал /etc/init.d/sshd restart - моя сессия с сервером разорвалась и ssh не запустился. В логах ошибки я не нашел, но подключившись к серверу на прямую ssh я завел без проблем. Он поругался только на сертификат, который мы уже закомментировали в init.d скрипте. Собственно поэтому и закомментировали.

На всякий случай выполнять будем в скрине:

screen  
/etc/init.d/sshd stop && /etc/init.d/sshd start

В этот момент связь с сервером обрывается.

Если Вы работаете в ОС Linux тогда, для того что бы подключиться к серверу назад, Вам нужно удалить старые сведенья о сервере из файла known_hosts:

ssh-keygen -f `~/.ssh/known_hosts` -R %server_ip%

Теперь можно подключаться к серверу.

Screenshot from 2014-02-10 11:56:49

Если в ходе компиляции Вам выпало вот такое сообщение:

configure: error: PAM headers not found

Screenshot from 2014-02-10 09:07:03

Установите недостающий пакет:

yum install pam-devel