Высокопроизводительный SSH\SCP

OpenSSH как известно реализует не только удаленную оболочку, но и клиент\сервер передачи файлов по тому же протоколу. Основная проблема в том, что большинство шифров, поставляемых с OpenSSH имеют однопотоковую реализацию, что снижает скорость передачи данных. Эту проблему решает набор патчей HPN-SSH. О том как его использовать и пойдет речь дальше.

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

  • Взять исходный код с OpenSSH.org
  • Разархивировать его
  • Наложить патч cat openssh-$version.diff | patch -p1
  • Скомпилировать его и установить configure && make && make install

План неплохой, но после такого варианта нужно написать конфигурационные файлы, файлы автозапуска сервера, клиента и т.д. И это не говоря уже о устаревшем варианте установки из исходных кодов. Мы пойдем другим путем и наложим патч на исходный код deb-пакета из апстрима нашей рабочей ОС. В данном случае будем работать с пакетом из состава Ubuntu 16.04 x64.

Для начала установим набор для компиляции, затем загрузим исходные кода пакета и установим зависимости, необходимые для сборки.

apt-get install build-essential devscripts dpkg-dev
apt-get source openssh
cd openssh
apt-get build-dep openssh

После завершения установки наложим наш патч. Налагать будем патч той версии openssh, которая загружена, т.е. в данном случае 7.2p2. Для наложения патча будем пользоваться стандартной системой управления патчей в Debian\Ubuntu — Quilt

quilt import -P openssh-7_2_P2-hpn-14.10.diff
quilt push -a -f
quilt pop -a

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

DEBEMAIL="builduser <build@test.com>" debchange --newversion 7.2p2-4.1-hpn14.10
debuild -us -uc -i -I -b

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

openssh-client_7.2p2-4.1-hpn14.10_amd64.deb
openssh-client-ssh1_7.2p2-4.1-hpn14.10_amd64.deb
openssh-client-udeb_7.2p2-4.1-hpn14.10_amd64.udeb
openssh-server_7.2p2-4.1-hpn14.10_amd64.deb
openssh-server-udeb_7.2p2-4.1-hpn14.10_amd64.udeb
openssh-sftp-server_7.2p2-4.1-hpn14.10_amd64.deb
ssh_7.2p2-4.1-hpn14.10_all.deb
ssh-askpass-gnome_7.2p2-4.1-hpn14.10_amd64.deb
ssh-krb5_7.2p2-4.1-hpn14.10_all.deb

Из них нам нужны только openssh-client, openssh-server и openssh-sftp-server. Каковые можно поставить с помощью dpkg.

Сборка и установка проведена, теперь нужно обратить внимание на документацию. В первую очередь авторы указывают, что

Optimal performance requires the MTR-AES-CTR mode be enabled on both ends of the connection.

Т.е. для получения оптимального результата желательно пользоваться патченым клиентом и сервером с обоих сторон. Так же рекомендую обратить внимание на конфигурационные параметры сервера и клиента, описанного в HPN-README.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.