понедельник, 2 января 2017 г.

Установка lamp Ubuntu 16.04

Операционная система Linux - отличная платформа для создания и тестирования веб сайтов. Учитывая, что большинство веб серверов используют Linux в качестве операционной системы, то и тестировать сайты лучше в этой системе, с использованием тех же инструментов, даже если это домашний компьютер. Намного удобнее иметь все под рукой и не боятся повредить сайт на сервере.
Сегодня мы поговорим о LAMP. На самом деле, это не программа, это стек программ с открытым исходным кодом необходимых для работы веб-сайтов, название лишь формальное и походит оно от первых букв названий входящих туда программ. Linux Apache MySQL PHP, а вместе LAMP, это те программы, которые нужно установить и настроить, для того, чтобы начать разрабатывать сайты или веб-приложения на домашнем компьютере. Linux - тут все понятно, это наша операционная система, Apache - веб сервер, MySQL - программа для управления базами данных и PHP - на данный момент, самый популярный язык для веб-программирования.
В этой инструкции будет рассмотрена установка LAMP ubuntu 16.04 Мы рассмотрим как установить Apache 2.4, MariaDB в качестве базы данных mysql и самую новую версию языка PHP 7. Для начала будет выполнена установка Apache ubuntu 16.04, так как это главный компонент всей системы, а уже потом подключим к нему дополнительные компоненты.

Установка Apache Ubuntu 16.04

Apache - это кроссплатформенный веб-сервер с открытым исходным кодом. Он поддерживает все необходимые функции веб-сервера, включая CGI, SSL, и виртуальные домены.
Установить Apache в Ubuntu очень просто, для этого достаточно выполнить:
$ sudo apt-get install apache2
После установки добавим программу в автозагрузку:
$ sudo systemctl enable apache2
И запустим веб-сервер сейчас:
$ sudo systemctl start apache2
lamp
Теперь можно проверить что получилось, откройте браузер и наберите в адресной строке localhost:
lamp1
Как видите, установка apache ubuntu 16.04 завершена и веб-сервер уже работает. Но это еще не все. Все отлично, если у вас один сайт, который нужно тестить на локальной машине, но если их несколько собирать все в под папках веб-сервера не совсем удобно, да и не все движки нормально относятся к этому, потому давайте рассмотрим как настроить виртуальные хосты.
Создайте новую папку для нашего виртуального хоста:
$ sudo mkdir /var/www/test.site
Дадим права на доступ:
$ sudo chmod -R 755 /var/www
Необходимо создать небольшой файл, index.html, чтобы он открылся когда вы откроете этот сайт:
$ sudo vi /var/www/test.site/public_html/index.html
<html>
<head>
<title>Welcome to Test!</title>
</head>
<body>
<h1>Success! Virtual host is working!</h1>
</body>
</html>
Теперь можно добавлять виртуальный хост, для этого создайте файл и наполните его содержимым:
$ sudo vi /etc/apache2/sites-available/test.site.conf
<VirtualHost *:80>
ServerName test.site
ServerAlias www.test.site
ServerAdmin webmaster@localhost
DocumentRoot /var/www/test.site/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Вот что значат некоторые строки:
  • ServerName - имя нашего сайта, виртуального хоста
  • ServerAlias - сайт будет доступен также по этому имени
  • DocumentRoot - корневой каталог с файлами сайта
Теперь сохраните файл, далее нужно активировать наш хост:
$ sudo a2ensite test.site.conf
Перезапускаем веб сервер:
$ sudo systemctl restart apache2
Теперь необходимо завернуть трафик с этого домена на локальный сервер, для этого добавьте строчку в /etc/hosts:
$ sudo vi /etc/hosts
127.0.0.1 test.site
Откройте браузер и в адресной строке наберите test.site:
lamp2
Кроме того, мы можем включить поддержку ssl для нашего веб-сервера. Для этого выполните:
$ a2enmod ssl
$ a2ensite default-ssl
После этого нужно будет перезагрузить веб-сервер:
$ sudo systemctl restart apache2
Теперь вы можете проверить работу SSL, набрав адрес https://localhost.
lamp20
Браузер не доверяет нашему сертификату, поскольку он самоподписанный, но мы можем спокойно добавлять его в исключения, это ведь наш сертификат. Теперь работает:

lamp21Установка PHP 7

Без языка программирования установка и настройка lamp в Ubuntu будет не завершена. PHP - это самый популярный язык программирования в веб. Его название, это рекурсивный акроним - PHP Hypertext Processor. Кроме того, что этот язык используется в веб, его можно применять, как язык общего назначения, язык сценариев.
Установка php 7 Ubuntu 16.04 выполняется следующей командой:
$ sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0
Если вы хотите установить все доступные модули php, чтобы в будущем не было проблем, вы можете выполнить команду:
$ sudo apt-get install php*
После завершения установки проверим версию php:
$ php -v
lamp3
Теперь пора проверить как все работает. Для этого создайте файл со следующим кодом на php:
$ sudo vi /var/www/test.site/public_html/test.php
<?php phpinfo(); ?>
lamp5
Осталось перезапустить apache2:
$ sudo systemctl restart apache2
Откройте еще раз наш сайт в браузере, на этот раз нас интересует страница test.php:
lamp4
Установка php 7 ubuntu 16.04 завершена и все очень хорошо работает. Но нужно еще кое-что настроить, а именно включить отображение ошибок в php. Иначе при возникновении ошибки вы увидите просто пустую страницу. Для этого откройте файл /etc/php/7.0/apache2/php.ini, найдите строку display_errors = Off и поменяйте off на on:
$ vi /etc/php/7.0/apache2/php.ini
lamp6
Теперь переходим к следующему этапу.

Установка MySQL Ubuntu 16.04

Базы данных используются сейчас почти в каждом движке интернет сайтов. Поэтому важно иметь на своем компьютере и это программное обеспечение. Установка Lamp Ubuntu 16.04 не может обойтись без базы данных, но в этой инструкции вместо Mysql мы будем использовать ее улучшенную и оптимизированную версию - MariaDB. Это очень надежный и масштабируемый сервер SQL со множеством улучшений и усовершенствованием.
Установка mariadb ubuntu 16.04 выполняется с помощью команды:
$ sudo apt-get install mariadb-server mariadb-client
Когда установка mysql ubuntu 16.04 будет завершена, мы можем переходить к настройке базы данных, для этого выполните команду:
$ sudo mysql_secure_installation
Сначала необходимо ввести текущий пароль root, просто нажимаем Enter, поскольку он еще не задан:
lamp7
Далее нажимаем у, чтобы задать новый пароль:
lamp8
Затем отключаем гостевые аккаунты:
lamp9
Отключаем удаленный доступ через root:
lamp10
Удаляем тестовые базы данных:
lamp11
Перезаписываем таблицы привилегий:
lamp12
Вот и все, установка mysql ubuntu 16.04 завершена и база данных готова к работе.

Установка phpmyadmin ubuntu 16.04

Установка и настройка lamp в ubuntu 16.04 также будет включать установку Phpmyadmin. Phpmyadmin - это бесплатный инструмент, с открытым исходным кодом, для реализации веб-интерфейса управления базами данных MySQL. Он доступен в официальных репозиториях Ubuntu 16.04, установим его с помощью команды:
$ sudo apt-get install phpmyadmin php-mbstring php-gettext
Но тут уже во время установки потребуется немного конфигурации. Сначала нужно выбрать наш веб-сервер:
lamp14
Для перемещения по пунктам используйте стрелки вверх/вниз, для выбора пробел, для переключения - Tab.
В следующем окне мастера нам предлагают настроить базу данных phpmyadmin, соглашаемся:
lamp15
Вводим пароль, который будет использован для подключения phpadmin к базе данных:
lamp16
Подтверждение пароля:
lamp17
По умолчанию в MariaDB есть плагин под названием unix_socket, он предотвращает вход под именем пользователя root в phpmyadmin или с помощью других TCP интерфейсов. Для его отключения выполните:
$ sudo -i
$ echo "update user set plugin='' where User='root'; flush privileges;" | mysql -u root -p mysql
Когда установка phpmyadmin ubuntu 16.04 будет завершена откройте браузер и наберите в адресной строке localhost/phpmyadmin:
lamp18
Все работает, для доступа к базе данных вы можете ввести логин root и его пароль, который задали на этапе настройки MySQL:
lamp19

Выводы

Вот и все установка lamp ubuntu 16.04 завершена успешно. Теперь все работает и вы можете приступать к созданию своих проектов.

Установка PhpMyAdmin Ubuntu на Nginx или Apache

Phpmyadmin - это один из самых популярных инструментов для управления базами данных mysql через веб-интерфейс. Он написан на php и JavaScript и с помощью него вы можете управлять локальным или удаленным сервером баз данных.
Используя PhpMyAdmin, мы можем создавать, удалять, переименовывать, редактировать базы данных, таблицы, поля, а также управлять пользователями, экспортировать, импортировать записи и выполнять любые команды SQL. На данный момент поддерживаются сервера баз данных MariaDB, MySQL и Drizzle. В этой статье мы рассмотрим как выполняется установка PhpMyAdmin Ubuntu 16.04 на веб-сервер Apache или Nginx.

Установка PhpMyAdmin в Ubuntu 16.04

Дальше, я буду предполагать, что все необходимое программное обеспечение, такое как mysql, php и веб-сервер apache или nginx уже установлены. Если еще нет, то вы можете просмотреть инструкцию установка LAMP в Ubuntu 16.04.
Утилита phpmyadmin доступна в официальных репозиториях Ubuntu. Поэтому вы можете очень просто установить ее оттуда. Для этого сначала обновим список репозиториев:
$ sudo apt update
Затем установим саму программу:
$ sudo apt install phpmyadmin
В официальных репозиториях содержится более старая версия, поэтому если вы хотите установить phpmyadmin ubuntu самой новой версии, нужно использовать PPA:
$ sudo add-apt-repository ppa:nijel/phpmyadmin
$ sudo apt-get update
$ sudo apt install phpmyadmin
Во время установки будет необходимо выбрать веб-сервер, с которым мы будем устанавливать phpmyadmin, выберите Apache с помощью пробела и нажмите Ок:
Настройки для Nginx придется указывать вручную и их мы рассмотрим чуть позже. Дальше нужно установить пароль на базу данных PhpMyAdmin, нажмите Да:
Затем введите два раза нужный пароль. Он вам вряд ли понадобится в дальнейшим, так что можете выбрать что-то сложное:
Возможно, для того чтобы все заработало придется включить несколько модулей php и конфигурационный файл apache:
$ sudo phpenmod mcrypt
$ sudo phpenmod mbstring
Затем включите конфигурационный файл Apache:
$ sudo a2enconf phpmyadmin
Установка phpmyadmin nginx ubuntu выполняется добавлением следующей секции в файл /etc/nginx/nginx.conf мы предполагаем, что nginx работает через php-fpm:
$ sudo vi /etc/nginx/nginx.conf
server{
listen 80;
server_name phpmyadmin;
access_log /var/log/phpmyadmin.access_log;
error_log /var/log/phpmyadmin.error_log;
location ^~ /phpmyadmin/ {
alias /usr/share/phpMyAdmin/;
index index.php;
location ~ /phpmyadmin(/.*\.php) {
include fastcgi.conf;
fastcgi_param SERVER_NAME localhost;
fastcgi_param SCRIPT_FILENAME /usr/share/phpMyAdmin$1;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
}
Сохраните и перезагрузите ваш веб-сервер:
$ sudo systemctl restart apache2
Или:
$ sudo systemctl restart nginx
Теперь, все точно должно работать. Откройте браузер и наберите в адресной строке http://localhost/phpmyadmin:
Введите ваш логин и пароль и затем, вы сможете делать все, что вам нужно с базами данных.

Защита PhpMyAdmin

Установка phpmyadmn Ubuntu 16.04 завершена. Но эта программа дает полный контроль над базой данных, поэтому нам нужно обеспечить максимальную ее безопасность. Сделаем доступ к Phpmyadmin по паролю. Для настройки Apache создайте файл /usr/share/phpmyadmin/.htaccess со следующим содержанием:
$ sudo vi /usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Вот что значат эти строки:
  • AuthType Basic - эта строка устанавливает тип аутентификации, мы указываем что будем использовать пароль;
  • AuthName - задаем сообщение, которое будет видеть;
  • AuthUserFile - файл с данными, которые будут использоваться для аутентификации;
  • Require - необходимое условие, для аутентификации.
Дальше нужно создать .htaccess:
$ sudo htpasswd -c /etc/phpmyadmin/.htpasswd пользователь
Вы можете добавить несколько пользователей, но для этого уже не используйте опцию -c:
$ sudo htpasswd /etc/phpmyadmin/.htpasswd пользователь
Теперь, при попытке открыть адрес phpmyadmin система запросит пароль. Только пользователи, которые введут пароль смогут получить доступ к интерфейсу входа phpmyadmin.

понедельник, 26 декабря 2016 г.

Проверка диска на битые секторы в Linux

Любой компьютер — сложное устройство, которые состоит из множества компонентов и никто не застрахован от сбоев любого из них. В этой статье мы рассмотрим как своевременно распознать одну из серьезных проблем с устройствами хранения информации, будь то жесткий диск или flash-накопитель, как выполняется проверка диска на битые секторы linux.
Любой накопитель состоит из множества маленьких блоков (секторов), которые хранят информацию в виде нулей или единиц (битов). Если, по какой-то причине, операционная система не может записать бит информации в определенный сектор, то можно считать его «битым».
Сектор может стать битым по разным причинам:
  • Заводской брак
  • Выключение питание компьютера во время записи информации.
  • Физический износ накопителя.
Небольшое количество битых секторов находится практически на любом накопителе. Но стоит обратить внимание,если их количество со временем увеличивается. Это может говорить о скорой физической смерти накопителя и Вам пора задуматься о его замене.
Давайте рассмотрим, при помощи каких утилит в Linux мы можем проверить диск на битые секторы linux.

Проверка накопителя на битые секторы средствами badblocks.

Badblocks — стандартная утилита Linuх для проверки на битые секторы. Она устанавливается по-умолчанию практически в любой дистрибутив и с ее помощью можно проверить как жесткий диск, так и внешний накопитель.
Для начала давайте посмотрим, какие накопители подключены к нашей системе и какие на них имеются разделы. Для этого нам нужна еще одна стандартная утилита Linux — fdisk.
Естественно, что выполнять команды нужно с правами суперпользователя:
$ sudo fdisk -l
Параметром -l мы говорим утилите fdisk, что нам нужно показать список разделов и выйти.
Теперь, когда мы знаем, какие разделы у нас есть, мы можем проверить их на битые секторы. Для этого мы будем использовать утилиту badblocks следующим образом:
$ sudo badblocks -v /dev/sda1 > badsectors.txt
Для проверки мы указываем следующие параметры:
  • -v — подробный вывод информации о результатах проверки.
  • /dev/sda1 — раздел, который мы хотим проверить на битые секторы.
  • > badsectors.txt — выводим результат выполнения команды в файл badsectors.txt.
Если же в результате были найдены битые секторы, то нам надо дать указание операционной системе не записывать в них информацию в будущем. Для этого нам понадобятся утилиты Linux для работы с файловыми системами:
  • e2fsck. Если мы будем исправлять раздел с файловыми система Linux ( ext2,ext3,ext4).
  • fsck. Если мы будем исправлять файловую систему, отличную от ext.
Вводим следующие команды:
$ sudo e2fsck -l badsectors.txt /dev/sda1
Или, если у нас файловая система не ext:
$ sudo fsck -l badsectors.txt /dev/sda1
Параметром -l мы говорим утилите использовать список битых секторов из файла badsectors.txt, который мы получили ранее при проверке с помощью утилиты badblocks.

Проверка накопителя на битые секторы в Linux в smartmontools

Теперь давайте рассмотрим более современный и надежный способ проверить диск на битые секторы linux. Современные накопители ATA/SATA ,SCSI/SAS,SSD имеют встроенную систему самоконтроля S.M.A.R.T (Self-Monitoring, Analysis and Reporting Technology, Технология самоконтроля, анализа и отчетности), которая производит мониторинг параметров накопителя и поможет определить ухудшение параметров работы накопителя на ранних стадиях. Для работы со S.M.A.R.T в Linux есть утилита smartmontools.
Давайте сначала ее установим. Если ваш дистрибутив основан на Debian\Ubuntu, то вводите:
$ sudo apt install smartmontools
Если же у Вас дистрибутив на основе RHEL\CentOS, то вводите:
$ sudo yum install smartmontools
Теперь, когда мы установили smartmontools мы можем посмотреть станицу помощи, введя команды:
$ man smartctl
или
$ smartctl -h
Давайте перейдем к работе с утилитой. Вводим следующую команду с параметром -H,чтобы утилита показала нам информацию о состоянии накопителя:
$ sudo smartctl -H /dev/sda1
Как видим, проверка диска на битые секторы linux завершена и утилита говорит нам, что с накопителем все в порядке!
Дополнительно, можно указать следующие параметры -a или --all, чтобы получить еще больше информации о накопителе, или -x и --xall, чтобы просмотреть информацию в том числе и об остальных параметрах накопителя.

Выводы

В этой статье мы рассмотрели способы проверки накопителей на наличие битых секторов под Linux для того,чтобы вовремя предусмотреть возможные сбои и не потерять данные.
Источник: www.tecmint.com

Набор команд для работы с SSH на все случаи жизни

SSH - это очень распространенный инструмент для системных администраторов. Наверное почти каждый день им пользуются тысячи, используют SSH для подключения к своим серверам, домашнему компьютеру, роутеру или смартфону. SSH-клиенты доступны для большинства популярных платформ, главное чтобы вы понимали обо всех возможностях SSH и понимали как его применить и где.
Трюки с SSH в Linux
OpenSSH был выпущен разработчиками OpenBSD в далеком 1999 году, много времени уже прошло, на сегодня OpenSSH стал стандартом безопасного и подключения к удаленной машине. Сидя в дома, вы можете удаленно админить сервера компании в которой вы работаете, так работают сотни тысяч админов по всему миру и все это благодаря разработчиками OpenBSD который создали OpenSSH. Прошло семнадцать лет с момент разработки OpenSSH, появилось много новых возможностей, возможность настройки и различных режимов работы, и много прочих возможностей о которых не все знают.
Сегодня я постараюсь описать некоторые из возможностей, не все конечно так как для этого не хватит одного материалы. Ниже мы рассмотрим небольшую подборку из 20 команд или более правильно выразиться рецептов, которыми вы можешь пользоваться как шпаргалкой в будущем. Эти команды доступны для работы как в Linux, так и в большинстве других ОС, которые имеют сборку OpenSSH. Чтобы не запутать, уточню, что удaленный пользователь и хост в материале ниже мы всегда обозначаем как user@host либо по отдельности как <user> и <host>.

1. Возможность быстрого запуска команд

Если вы хотите выполнить всего одну удаленную команду, не обязательно подключаться к SSH, вводить команду, а затем отключаться. Можно сделать это сразу. Например, так можно посмотреть заполненность ФС удаленной машины:
 ssh user@host df -h
А так — перезагрузить ее:
 ssh user@host sudo reboot

2. Запуск списка команд

Если у тебя есть целый список команд, которые следует выполнить, их можно записать в файл и скормить этот файл SSH:
 ssh user@host "`cat file.txt`"

3. Удаленные редактирование файлов локальным редактором

Чтобы отредактировать файл на удаленной машине, не обязательно заходить на нее и иcпользовать консольный редактор(vim/nano итд). Вы можете открыть на редактирование файл одним из текстовых редакторов которые установлены у вас на локальной машине (gedit заменяем на свой редактор):
 gedit scp://user@host//путь/к/файлу

4. Копирование содержимое удаленного файла в буфер обмена

Если вам нужно скопировать содержимое определенного файла который находится на одном из серверов или удаленной машине, не обязательно выводить содержимое на экран или открывать в вашем текстовом редакторе и копировать вручную. Можно поступить более оригинально и скопировать в буфер, используем команду ниже:
 ssh user@host cat /путь/к/файлу | xclip
Как вариант скопировать вывод команды:
 ssh user@host uname -a | xclip

5. Сравнение удаленного и локального файлов без копирования

Для данной задачи вы можно использовать небольшой прием, смотрим команду ниже:
 ssh user@host cat /путь/к/удаленному/файлу | diff /путь/к/локальному/файлу -

6. Работа с удаленными файлaми используя локальный файловый менеджер

Работая с большим количеством файлов, не удобно для этого использовать консольные команды или mc который запущен на удаленной машине. Но вы всегда можно подключить любой из каталогов удаленной машины например как сетевой диск. Это вы можете осуществить используя утилиту sshfs:
 sudo apt install sshfs
Создаем каталог для подключения «сетевого диска»:
 mkdir remote_files
Подключаем каталог:
 sshfs user@host:/home/user ~/remote_files/
Вот и все, с этого момента все файлы удаленного каталога /home/user вы будете видеть в каталоге ~/remote_files/ где сможете с ними работать, как с обычными файлами на компьютере.

7. Используем tmux

Если вам нужно выполнить сложные манипуляции на удaленной машине, это в большей части случаев не ограничиваются одной консолью. Для решения подобных задач мы открываем нeсколько SSH-соединений, в которых выполняем различные команды, копиpуем текст из одной консоли в другую, мониторим выполнение и прочее. Не обязательно держать открытыми несколько сессий, достаточно одной, в которой будет запущен tmux.
Утилита tmux - это так же детище команды разработчиков OpenBSD. Утилита позволяет запускать внутри одной SSH-сессии неограниченное количество консолей, с которыми вы можете работать одновременно, в том числе используя несколько на одном экране. О главном - tmux имеет поддержку функции detach/attach, которая позволяет отключиться от используемой на данный момент сессии tmux, закрыть соединение, подключиться к этой же машине, но уже с другого компьютера и возобновить сессию tmux со всеми открытыми консолями и их содержимым которое было до этого но с другого компьютера, очень удобно.
Tmux в режиме разделения экрана
Tmux в режиме разделения экрана
Утилита Tmux доступна с репозиториев наверное всех популярных дистрибутивов. Инструкцию по использованию вы можете найти в документации -здесь.

8. Как быстро скопировать ключи

Копирование публичного ключа на удаленный сервер не простая задача, так как требует выполнения нескольких действий вручную. Этот процесс можно упростить и скопировать ключ в автоматическом режиме:
 ssh-copy-id user@host
Не обязательно копировать основной ключ, используя флаг -i можно указать любой другой:
 ssh-copy-id -i ~/my_key.pub user@host
Копируем ключ
Копируем ключ

9. Создаем стабильное соединение с машиной

Если вы в течение дня часто подключаетесь к одной машине, на несколько минут или секунд (чтобы просто запустить одну команду), есть можно создать с ней постоянное соединение. Ваш компьютер будет держать соединение открытым и использовать его для каждого подключения к машине. Это намного быстрее и экономичнее с точки зрения трафика и нагрузки на процессор.
Добавьте следующие строки в ~/.ssh/config:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no
А затем создайте соединение:
 ssh -MNf user@host

10. Используем версию SSH для неустойчивых соeдинений

SSH создан для работы с использованием стабильного соединения и не рассчитан на работу с использованием неустойчивого интернет-соединения, в связи с чем не умеет реагировать на потерю пакетов. Если у вас соединение оборвется, SSH повиснет и будет находиться в таком состоянии, пока не закончится тайм-аут. До тех пор пока вы используете надежное оптоволоконное соединение, это не будет проблемой, но как только вы попадете в условия где нет покрытия кабельного интернета, 3G для вас будет казаться экзотикой, в следствии чего SSH превратится в невыносимо тупой инструмент.
Решить проблему можно используя autossh. Это обертка над SSH, которая позволяет проверять жизнеспособность канала. Autossh создает дополнительное SSH-соединение с сервером и непрерывно шлет по нему heartbeat-пакеты. Если пакет не доходит до адресата, autossh считает канал мертвым и перезапускает SSH-соединение.
Пользоваться очень просто:
 sudo apt install autossh
 autossh -M5000 user@host
По дефолту тайм-аут между отправкой heartbeat-пакeтов составляет десять минут, что очень много. Если вы хотите уменьшить тайм-аут пропиши его в переменную AUTOSSH_POLL перед запуском autossh (значение в секундах):
 export AUTOSSH_POLL=10
Либо используем вариант еще лучше предыдущего: mosh. Оптимизированная для неустойчивых и низкоскоростных соединений версия SSH, работающая по протоколу UDP. Mosh позволяет получить быстрое и отзывчивое соединение даже на очень медленном канале, из коробки позволяет поднимать упавшее соединения, переключать клиента с одного IP на другой (при переключении с Wi-Fi-соединения на мобильное, например) без перезапуска сессии.
Mosh имеет вcего один недостаток: он требует установки не только на локальную машину, но и на удаленную. Зато после этого ничего настраивaть не нужно, достаточно использовать команду mosh вместо ssh. Более того, mosh уже встроeн в SSH-клиенты JuiceSSH для Android и Blink для iOS.

11. Открываем порт SSH лишь по необходимости

Работая с SSH порт вашего сервера в ближайшем будущем станет целью большого количества ботов, которые будут пытаться к нему подключаться или же подобрать пароль, даже если вы отключили аутентификацию по паролю. Как бороться с ботами? Для этой задачи у нас есть два способа: первым способом будет установка утилиты fail2ban которая поможет автоматически отшибать особо надоедливых ботов, второй способ, это конечно же открывать порт только тогда, когда вам это необходимо.
Если вы подключаетесь к серверу нечаcто, второй способ идеален. Идея в том, что на сервер устанавливается специальный демон, который слушает указанные порты и в случае соединения с этими портами в определенном порядке откроет 22-й порт. Другой порядок соединения будет закрывать порт.
Техника называется port knoking и реализуется с помощью демона knockd. Установка демона на сервер:
 sudo apt install knockd
Настройка демона, добавьте в файл конфиг /etc/knockd.conf следующие строки:
[options]
 logfile = /var/log/knockd.log
[openSSH]
 sequence = 3000,4000,5000
 seq_timeout = 5
 command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
 tcpflags = syn
[closeSSH]
 sequence = 5000,4000,3000
 seq_timeout = 5
 command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
 tcpflags = syn
Перезапустим демон:
 sudo /etc/init.d/knockd restart
Теперь используем следующую команду для подключения к серверу:
 knock <host> 3000 4000 5000 && ssh user@host && knock <host> 5000 4000 3000
Она позволит открыть порт перед SSH-соединениeм и закрыть его после закрытия сессии. Стоит обратить внимание, что в настройках брандмауэра SSH-порт должен быть закрыт.
Стучимся в порты
Стучимся в порты

12. Защищаемся от брутфорса

Установка fail2ban - второй метод защиты от ботов которые подбирают пароли. Демон Fail2ban, имеет основную задачу, непрерывно мониторить логи сетевых служб (Apache, vsftpd, SSH…) где он проверяет, ищет вредителей которые слишком часто пытаются аутентифицироваться и блокирует их IP (три неудачные попытки подряд и в бан на десять минут).
Преимущество fail2ban в том, что он не нуждается в настройке и начинает работать сразу же после установки. Все, что надо сделать, - это установить пакет:
 sudo apt install fail2ban

13. Измеряем скорость соединения

Используя SSH, вы можете легко проверить скорость вашего соeдинения с машиной. Для этой задачи можно использовать утилиту pv (pipe viewer). Смотрим пример команды ниже:
 yes | pv | ssh user@host "cat > /dev/null"
Измеряем скорость соединения
Измеряем скорость соединения

14. Используем SSH как SOCKS-прокси

SSH очень легко изменить в SOCKS-прокси, который будет пересылать ваши данные между локальной машиной и SSH-сервером через зашифрованный канал. Для этого вам нужно сделать следующее, - запустить SSH-клиент с флагом -D, пoсле которого указать номер SOCKS-порта (флаг -C включает принудительное сжатие трафика):
 ssh -D 9999 -C user@host

15. Обходим файрволы

В дополнение к SOCKS-прокси, SSH имеет функцию прозрачного "проброса портов". Работает примерно так: на локальной машине открывается порт. Трафик, который будет передаваться на этот порт, прозрачно проксируется через удалeнную машину и направляется на указанный хост:порт. Приведу пример: ваш твой начальник заблокировал доступ к linuxsoid.com на уровне корпоративного файрвола. Но вы можете обойти это ограничение, используя удаленный SSH-сервер:
 ssh -L8080:linuxsoid.com:80 user@host
Теперь все подключения к localhost:8080 будут перенаправляться на linuxsoid.com:80.

16. Сохраняем настройки подключения к хостам

Если вы работаете с большим количеством хостов используя имя разных юзеров и к всему этому используете разные ключи, вы можете существенно упростишь вашу жизнь, если создадите для этих хоcтов шорткаты. Например, следующие строки ~/.ssh/config описывают два хоста:
  • site.com, SSH-сервер на кoтором «висит» на порту 2222, а в качестве ключа используется ~/my_key.pem;
  • 192.168.0.1, с SSH-сервером на стандартнoм порту, юзером root и принудительным отключением аутентификации с помощью ключа.
    Host server1
     HostName site.com
     Port 2222
     User user
     IdentityFile ~/my_key.pem
    
    Host server2
     HostName 192.168.0.1
     User root
     PubkeyAuthentication no
Теперь, чтобы подключиться к site.com, нет нужды нaбирать длинную команду:
 ssh -i ~/my_key.pem user@example.com -p 2222
Вы можете использовать шорткат:
 ssh server1

17. Подключаемся к удаленной машине через другую машину

Например, у вас есть доступ к host1, но вы не имеете доступа к host2 (он за файрволом), но доступ к host2 имеется у host1. В итоге вы можете подключиться к host2 вот так:
 ssh -t user@host1 ssh user@host2

18. Копиpуем файлы с удаленной машины на другую машину через свою

Примерно такая же история как и при подключении к удаленной машине через другой компьютер. У вас есть файл который необходимо скопировать с host1 на host2, но они не могут друг с другом общаться. В данном случае, вы можете скопировать файл используя локальную машину:
 ssh root@host1 "cd /копируемый/каталог/ && tar -cf - ." | ssh root@host2 "cd /куда/копировать/ && tar -xf -"

19. Запуск графических приложений

Linux/BSD используют ту же клиент-серверную оконную систему X Window System, которая изначально разрабатывалась для запуска графических приложений на мейнфрейме с выводом изображения на экран клиента. Поэтому она из коробки позволяет запускать приложения на удаленной машине так, чтобы их вывoд был перенаправлен на локальную. SSH умеет форвардить протокол X, так что его можно использовать для запуска не только консольных, но графических приложений:
 ssh -X user@host firefox

20. Прослушивание музыки с удаленной машины

Немного надуманный, но в целом довольно интересный трюк:
 ssh user@host "cat /home/user/music/*.mp3" | mpg123 -
Своего рода интернет-радио для одного.

Выводы

SSH - это сложная и очень развитая штука. Все двадцать советов, что описаны выше - это всего лишь часть, на что способен этот инструмент.
Источник: xakep.ru