Сказ о том, как установить OpenSSH 6 из исходников на удаленный сервер с CentOS 5.8
Многим известен консервативный подход разработчиков RadHat и CentOS к обновлению пакетов. Но, как известно, в старых версиях ПО находят новые дыры в безопасности, что совершенно недопустимо для серверов. В CentOS 5.x установлен OpenSSH версии 4.3. Наша задача - обновить его до последней доступной версии.
Можно попробовать найти нужный rpm пакет, но в таком случае, с большой вероятностью, возможности версии Вашей ОС не удовлетворят запросы паке. Обновиться до последней версии можно только собирая пакет руками.
Для начала нам потребуются несколько пакетов:
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%
Теперь можно подключаться к серверу.
Если в ходе компиляции Вам выпало вот такое сообщение:
configure: error: PAM headers not found
Установите недостающий пакет:
yum install pam-devel