Как пользоваться протоколом SSH в Ubuntu: установка и настройка

SSH (англ. Secure Shell — «безопасная оболочка»)  удобный и безопасный способ администрировать удалены сервер . Собственно по этому им пользуются все ). И для начала нам нужно приложения для SSH подключения. Самая известная и удобная программа под Windows это — PuTTY . Скачать ее можно с оф.сайта , там же есть и набор утилит для нее.

Зачем нужно подключиться по SSH ?

Слово SSH — это сокращение от Secure SHell (англ. безопасная оболочка).Необходимость в подключении через SSH возникает тогда, когда у устройства нет графического интерфейса для настройки или есть потребность тонкой настройки. Давайте разберем на простой аналогии, что я имею в виду. Допустим, вам необходимо записаться на прием к врачу-невропатологу. Но ваша замечательная больница не предоставила такой возможности на своём сайте. Тогда вы по старинке идете на маршрутку, покупаете билет (или едете по проездному), доезжаете до больнички, приходите в регистратуру, берете папочку для записей к врачу и записываетесь на тот день, который вам нужен. Да долго и сложнее чем записаться через сайт, но других вариантов ведь нет?

Что представляет собой протокол SSH

Протокол Secure Shell, известный также как SSH — специальный протокол для безопасного удалённого доступа к компьютеру через сетевое подключение. Протокол имеет много возможностей, в том числе организацию защищённого подключения, запуск командной строки терминала на компьютере, к которому вы подключаетесь удалённо, запуск приложений с графическим интерфейсом, передача файлов и развёртывание приватных сетей.

Что представляет собой протокол SSH

Существует множество утилит, отвечающих за управлением протоколом. На операционной системе Ubuntu самым известным является Open SSH. Это полностью свободный продукт с открытой лицензией и полным набором самых необходимых функций. Клиент для управления SSH-подключением уже включён в дистрибутив Ubuntu, вам нужно будет лишь установить и настроить серверные компоненты. Управление осуществляется через команды в терминале.

А что скажет Google?

В общем‑то, задача не новая, и реали­заций пос­тро­ения SSH-тун­неля сущес­тву­ет доволь­но мно­го. В Google мож­но с ходу най­ти ре­шения на базе PuTTY или ва­риан­ты для Windows 10. Мы сво­их поль­зовате­лей любим (и свои нер­вы тоже). А зна­чит, надо дать им такой инс­тру­мент, который не нуж­но нас­тра­ивать и который будет работать надеж­но.

Ины­ми сло­вами, решение дол­жно отве­чать сле­дующим тре­бова­ниям:

  • прос­тота для поль­зовате­ля;
  • лег­кость под­дер­жки;
  • прос­тая и понят­ная под­готов­ка и нас­трой­ка «сер­верных час­тей».

Ре­шение будет осно­вано на тех­нологии RDP over SSH. Тех­ничес­ки мы орга­низу­ем это так:

  • кли­ент SSH для орга­низа­ции тун­неля с проб­росом пор­та до целево­го ПК под­клю­чения;
  • ав­томати­чес­кий старт RDP-сес­сии без допол­нитель­ного вво­да парамет­ров под­клю­чения.

Сис­тема дол­жна быть лег­ко встра­иваемой, и дол­жен быть кли­ент для прод­винутых поль­зовате­лей (опци­ональ­но).

Настройка сервера

Первое о чем нужно позаботиться это смена стандартного порта для подключения, иначе уже через пару минут к вам выстроится очередь из ботов. Изменить эту и любую другую настройку можно в файле /etc/ssh/ssh_config, для порта есть строчка Port, если нет, то нужно ее дописать

Port любой_порт_отличный_от_стандартного

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

AllowUsers user1 user2 user3

Еще может быть полезным запретить подключение с пустым паролем

PermitEmptyPasswords no

Не забываем перезапустить сервер

/etc/init.d/ssh restart

В принципе это самые основные настройки, которых хватит для добротного SSH сервера, теперь обратимся на сторону клиента.

Соединение по SSH с сервером

Теперь можем перезайти с новыми параметрами на ваш сервер. В терминале набираем:

ssh -p 2222 [email protected]

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

netstat -tupln | grep LISTEN

Вы должны увидеть порт 2222

В случае ошибок полезно бывает смотреть лог /var/log/secure либо использовать опции -v, -vv или -vvv для вывода детального лога соединения:

Читайте также:  Справочное руководство Мандрива Linux (2006).pdf

ssh -vvv [email protected]

Если есть вопросы, то пишем в комментариях.

Также можете помочь проекту, заранее всем СПАСИБО!!!

Пожертвовать

Простейшие команды Linux для VPS/VDS

Итак, Вы оказались в консоли в режиме root, что же делать дальше?! Прежде всего, давайте проверим конфигурацию сервера, а то вдруг нам чего-то не додали, в этом нам помогут следующие команды:

cat /proc/cpuinfo – покажет информацию о процессоре. free –m – покажет информацию о объеме памяти. df –h – покажет информацию о дисковом пространстве. ifconfig – покажет информацию об IP.

Теперь посмотрим на самые используемые команды. Прежде всего, эта команда top, которую лучше запускать в виде top –c. Данная команда позволит вывести информацию о нагрузке на сервер «load average» и покажет, какие процессы грузят систему. Второй командой является команда ps, которую лучше запускать с параметрами: ps aux —sort:rss. Кстати, выйти из команды top можно, нажав сочетание клавиш [Ctrl] + [Z].

Следующая команда ls выведет список файлов и директорий в текущей директории, запустив ls –la можно получить расширенную информацию об этих файлах и папках, включая файлы, начинающиеся на точку.

Команда rm удалит не нужные данные, mkdir создаст директорию, touch – файл, а команды mv и cp — это команды перемещения и копирования папок и файлов. Команда cd позволит перейти в иную директорию. Командой find можно искать файлы или директории. Скачать файл можно командой wget. Вывести содержимое командой cat или tail. А отредактировать через редактор и команду vi.

Если какой-то процесс завис, то его можно завершить командой kill -9.

Изменить пароль пользователю можно командой passwd.

Очень важной командой при работе с Linux, является команда man. С помощью этой команды мы можем получить информацию о другой команде, иными словами, эта команда выводит инструкцию к какой-либо команде.

Также получить короткую справку к команде можно, набрав параметр –h или —help.

Установку тех или иных пакетов можно произвести командами: yum или apt-get, в зависимости от используемой ОС.

Теперь пройдемся по структуре системы, в папке /usr находятся исполняемые файлы и библиотеки программ, в папке /etc находятся конфигурационные файлы программ, в папке /var находятся рабочие файлы программ, в папке /tmp находятся временные файлы.

Конечно же, в одной статье невозможно охватить все команды, поэтому при работе с Linux не обойтись без поиска команд в поисковых системах, но хотя бы список основных команд Вы теперь знаете.

Где брать данные для подключения

IP-адрес сервера назначается при его создании из выбранной сети. Он указан в информации о сервере в соответствующем разделе:

Исходный пользователь и пароль может отличаться в зависимости от операционной системы.

Детали доступа для Linux-based OS

Имя пользователя по умолчанию для всех наших ОС — clouduser.

Где брать данные для подключения

Читайте в нашей статье о причинах этого и как выполнять команды пользователя с привилегиями root.

Если вы считаете целесообразным включить root-доступ, воспользуйтесь нашей инструкцией.

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

Чтобы подключиться с Linux OS/Mac OS к серверу по ssh, нужно добавить специальный ключ -i, указав путь к файлу ключа на вашем ПК. По итогу команда будет выглядеть так:

ssh [email protected] -i /pathtokey

— где 0.0.0.0 заменяем на IP сервера, а /pathtokey на полный или относительный путь к файлу приватного ключа RSA.

Чтобы подключиться через Zoc, сохраняем приватный ключ RSA в текстовом документе и указываем к нему путь при подключении:

Где брать данные для подключения

Чтобы подключиться через PuTTY, сохраняем приватный ключ RSA в текстовом документе. Сначала отформатируйте ключ, чтобы клиент PuTTY мог с ним работать.

1. Открываем программу PuttyGen, которая устанавливается вместе с клиентом. Заходим в пункт меню Conversions → Import key.

2. Выбираем текстовый файл, куда сохранили ключ, нажимаем Save private key.

3. Подключаемся: в разделе Session вводим IP сервера и порт 22 по умолчанию:

4. Переходим в раздел SSH — Auth и указываем путь к уже конвертированному ключу. Нажимаем Open, при подключении указываем логин, и аутентификация происходит по ключу:

Если вы хотите включить возможность подключения к серверу по SSH с паролем, нужно править настройки самой службы SSH. В таком случае выше опасность того, что пароль от сервера могут взломать.

5. Подключаемся к серверу через встроенную консоль.

Где брать данные для подключения

Имя пользователя: clouduser.

Чтобы получить исходный пароль, выберите пункт «Получить пароль» из выпадающего меню напротив сервера:

6. В поле Скопируйте/Вставьте ваш личный ключ вставьте приватный ключ (RSA) от ключевой пары, которая указывалась при создании сервера. Ключ вставляйте целиком, вместе с тэгами ———-BEGIN/END KEY———-.

Читайте также:  Абсолютный и относительный путь

7. Нажимаем на «Расшифровать пароль» и видим исходный пароль для подключения к серверу:

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

8. Вводим пароль в консоль и попадаем на сервер. Выполняем команду:

sudo su

Где брать данные для подключения

9. Открываем файл конфигурации службы SSH при помощи текстового редактора nano:

nano /etc/ssh/sshd_config

Также можно использовать другой текстовый редактор, например, vi:

vi /etc/ssh/sshd_config

Обратите внимание, что vi стартует в командном режиме. Для редактирования текста нужно нажать клавишу i латиницей.

10. В файле конфигурации находим строку PasswordAuthentication. Перед ней не должно быть знака #, напротив должно стоять yes. Строка должна выглядеть так:

PasswordAuthentication yes

Где брать данные для подключения

После внесения изменений сохраняем их.

Для редактора nano: Нажимаем комбинацию клавиш Ctrl+X, затем клавишу Y.

Для редактора vi:

  • Нажимаем клавишу Esc — редактор переходит в командный режим. Вводим символ двоеточия : редактор перемещается вниз.
  • В начале строки видим : .
  • Вводим команду wq! и нажимаем Enter.

Чтобы применить изменения, нужно перезапустить службу SSH:

/etc/init.d/ssh restart

или

Где брать данные для подключения

/etc/init.d/sshd restart

или

systemctl restart

или

service sshd restart

После перезагрузки службы можно подключаться к серверу по SSH с паролем. Получить исходный пароль сервера через панель управления можно только для наших шаблонов операционных систем. Если вы используете собственный образ, этот метод не сработает.

Детали доступа для Windows Server OS

Где брать данные для подключения

Для подключения доступен пользователь Administrator. 

1. Подключаемся к серверу через встроенную консоль. 

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

2. Вводим и подтверждаем пароль. После этого можно подключаться к серверу по RDP.

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

1. В поиске пишем cmd и выбираем приложение командной строки:

2. В открывшейся консоли вводим команду:

Где брать данные для подключения

net user Administrator someStrongPassword

Вместо someStrongPassword вводим желаемый пароль высокого уровня сложности:

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

  • share
  • Facebook
  • Twitter
  • Email

Как ограничить доступ по SSH

Все изменения вносятся в /etc/ssh/sshd_config Чтобы изменения вступили в силу, необходимо перезагрузить SSH

Сменить порт

Port 9724

Теперь при авторизации вам нужно вместо стандартного 22 порта указывать 9724. Способ очень простой и действенный против большинства простых ботов хакеров, которые стучатся в стандартные порты. Тут главное не создать конфликт с другими службами и подобрать заведомо неиспользуемое число.

Запретить связь по старому протоколу

Здесь мы определяем, что связь возможна только по протоколу v2

Protocol 2

Запретить авторизацию под root

PermitRootLogin no

По умолчанию no. Если yes, можно авторизовываться под рутом. Под root работать небезопасно, лучше создать своего пользователя и работать под ним.

Если вы авторизованы не под root, перед всеми консольными командами нужно добавлять sudo — расшифровывается как Substitute User and DO — подмени юзера и делай (под ним). Например, позволяет исполнять команды от имени суперпользователя root.

Уменьшить число попыток авторизации

MaxAuthTries 2

Количество попыток ввода пароля. По умолчанию 6. При неудачном переборе сеанс связи обрывается.

Уменьшить время ожидания авторизации

LoginGraceTime 30s

По умолчанию, 120 секунд может длиться сеанс авторизации. По истечению этого времени он обрывается. 2 минуты на авторизацию — это перебор, всё это время сервер держит связь открытой, что очень нерационально. Полминуты за глаза хватит.

Закрыть доступ по IP

Прежде чем настраивать ограничения по IP, убедитесь, что в случае ошибки в настройке и последующего бана собственного IP у вас останется альтернативный способ вернуть доступ к серверу

Если доступ нужен только вам, самым простым и надёжным будет закрыть доступ отовсюду, кроме вашего IP или, если он динамический, то диапазона IP.

  1. Открываем /etc/ и добавляем туда

    SSHD:

    где — ваш IP. Если у вас динамический IP, определите IP с маской подсети и запишите Вашу подсеть вместо IP, например:

    SSHD:

  2. Открываем /etc/ и добавляем туда:

    SSHD: ALL

Теперь никто, кроме вас, не сможет авторизоваться на сервере по SSH.

Ещё один способ ограничения доступа по IP

Можно воспользоваться следующей директивой:

AllowUsers = *@1.2.3.4

Здесь мы разрешаем доступ только для IP 1.2.3.4

Шаг — Отключение аутентификации с помощью пароля на сервере

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

Прежде чем выполнять описанные в настоящем разделе шаги, убедитесь, что вы настроили аутентификацию на базе ключей SSH для учетной записи root на этом сервере, или (предпочтительно) вы настроили аутентификацию на базе ключей SSH для учетной записи сервера без привилегий root и с привилегиями sudo. На этом шаге вход в систему по паролю будет заблокирован, поэтому очень важно сохранить возможность доступа с правами администратора.

Подтвердив права администратора для удаленной учетной записи, выполните вход на удаленный сервер с помощью ключей SSH как пользователь с привилегиями root или как пользователь с привилегиями sudo. Затем откройте файл конфигурации демона SSH:

  • sudo nano /etc/ssh/sshd_config

Найдите в файле директиву PasswordAuthentication. Эта строка может быть прокомментирована с помощью # в начале строки. Раскомментируйте строку, удалив #, и установите значение no. После этого вы не сможете выполнять вход в систему через SSH с использованием паролей учетной записи:

/etc/ssh/sshd_config

. . . PasswordAuthentication no . . .

Сохраните и закройте файл, нажав CTRL+X, затем нажмите Y для подтверждения сохранения файла, а затем нажмите ENTER для выхода из nano. Для фактической активации этих изменений нужно перезапустить службу sshd:

  • sudo systemctl restart ssh

В качестве меры предосторожности откройте новое окно терминала и проверьте правильность работы службы SSH, прежде чем закрывать этот сеанс:

  • ssh username@remote_host

После проверки корректной работы службы SSH вы можете безопасно закрыть все текущие сеансы сервера.

Теперь демон SSH на вашем сервере Ubuntu будет реагировать только на аутентификацию с помощью ключей SSH. Логины на базе пароля были отключены.

Примеры файлов ssh_config для организации доступа к серверам по SSH

Пример файла ssh_config с применением метода аутентификации на основе SSH-ключей

В примере файла приведена директория для пользователя root на локальной машине, в которой хранится SSH-ключ (при написании файла, вы можете подставить свои данные). Также в этом примере покажем, как создавать несколько псевдонимов в ssh_config для соединения по SSH к различным серверам (в первом случае — это наш сервер на , во втором случае — это сервер базы данных).

Host freehostUA HostName Port 22 User root IdentityFile /root/.ssh/id_rsa Host DB1 HostName Port 2222 User adminDB

*Примечание: Как создать пару SSH-ключей под Linux подробно описано в статье на нашем сайте

Решение проблемы подвисшей SSH-сессии

Приведем еще один пример файла ssh_config, но уже с использованием параметров ServerAliveInterval, ServerAliveCountMax и PreferredAuthentications (в данном примере выбран метод аутентификации publickey, т.е. с использованием SSH-ключей):

Host test1 HostName User root PreferredAuthentications publickey ServerAliveInternal 5 ServerAliveCountMax 1

Иногда сессии SSH могут зависать по причине проблем с качеством связи и по др. причинам. Что происходит в данном случае? SSH начнет проверять соединение, выполняя отправку запросов echo на удаленный сервер в течении определенных промежутков времени. За это отвечает параметр ServerAliveInterval. Если же без ответа останется больше запросов, чем задано в параметре ServerAliveCountMax, то SSH закроет данное соединение.

Примеры файлов ssh_config для организации доступа к серверам по SSH

Организация SSH Jump Server

SSH Jump Server — это сервер под управлением ОС Линукс, единственный в корпоративной сети компании, доступный из сети Интернет. Такой сервер применяется как шлюз в частной сети для получения доступа к другим компьютерам под Linux, используя SSH. Bastion host — единственный шлюз, через который можно получить доступ к ИТ-инфраструктуре компании. Это очень действенная мера в плане обеспечения кибербезопасности и защиты от атак злоумышленников. Для системного администратора наличие Jump host в корпоративной сети существенно упрощает ведение учета всех SSH-соединений. С помощью командной строки эту функцию можно реализовать, используя флаг –J.

Например, если вы имеете доступ к «бастиону» , то вы получаете возможность доступа к другим серверам в локальной сети организации, которые расположены за NAT, для этого нужно применить флаг -J в командной строке:

ssh -J

где — это IP адрес станции в локальной сети, к которой вы планируете подключение.

Однако, вместо ввода команды в терминале проще сразу прописать данную функцию в файле ssh_config:

Host 10.1.1.* ProxyJump

Когда администратор введет команду ssh в терминале, SSH-клиент установит соединение c , в результате чего, оно будет перенаправлено на IP в локальной сети. Конечно же, мы показали самый простой пример использования опции ProxyJump в ssh_config, для более серьезных решений необходимо еще провести дополнительные настройки на удаленном сервере, но эта тема уже для отдельной статьи про Jump host.