Teamshell text UI (ttui) — консольный клиент
У TeamShell есть очень интересный и необычный консольный клиент. Для того, чтобы подключаться по ssh к целевым серверам, нет необходимости ставить себе на компьютер графический клиент. Можно воспользоваться консольным, который поставляется в виде пакета, либо простого бинарника. Если у вас Linux или Windows с WSL, для регистрации и подключения через Team Shell достаточно выполнить пару шагов.
# curl https://download.teamshell.com/ttui/ttui_linux --output ttui # chmod +x ttui # ./ttui
Вы можете либо зарегистрироваться, либо сразу залогиниться, если есть учетная запись. А дальше вам доступен функционал по подключению на основе сервисов, к которым у вас есть доступ.
Это очень удобно, если вам нужно выполнить разовое подключение и не хочется ставить стороннее ПО на основную рабочую машину. Можно подключиться с любой машины под управлением Linux или MacOS, просто запустив бинарник. После подключения его можно удалить.
Отдельно обращаю внимание на следующий момент. При использовании hosted версии, при подключении к нему по SSH, можно открыть показанный выше ttui и подключаться к серверам
То есть ставить себе вообще ничего не надо. Можно без проблем подключиться к серверу через любой мобильный ssh клиент.
Настройка SSH входа без пароля
Чтобы настроить SSH-вход без пароля в Linux, все, что вам нужно сделать, это сгенерировать открытый ключ аутентификации и добавить его в файл удаленных хостов.
Следующие шаги описывают процесс настройки входа по SSH без пароля:
-
Проверьте существующую пару ключей SSH.
Перед созданием новой пары ключей SSH сначала проверьте, есть ли у вас уже ключ SSH на вашем клиентском компьютере, потому что вы не хотите перезаписывать существующие ключи.
Выполните следующую команду ls, чтобы проверить наличие существующих ключей SSH:
Если есть существующие ключи, вы можете использовать их и пропустить следующий шаг или создать резервную копию старых ключей и сгенерировать новый.
Если вы видите или это означает, что у вас нет ключа SSH, и вы можете перейти к следующему шагу и сгенерировать новый.
-
Создайте новую пару ключей SSH.
Следующая команда сгенерирует новую пару ключей SSH 4096 бит с вашим адресом электронной почты в качестве комментария:
Нажмите чтобы принять расположение и имя файла по умолчанию:
Затем инструмент попросит вас ввести безопасную парольную фразу. Независимо от того, хотите ли вы использовать кодовую фразу, решать вам, если вы решите использовать кодовую фразу, вы получите дополнительный уровень безопасности. В большинстве случаев разработчики и системные администраторы используют SSH без парольной фразы, поскольку они полезны для полностью автоматизированных процессов. Если вы не хотите использовать кодовую фразу, просто нажмите .
В целом взаимодействие выглядит так:
Чтобы убедиться, что ключи SSH сгенерированы, вы можете указать свои новые закрытые и открытые ключи с помощью:
-
Скопируйте открытый ключ
Теперь, когда вы сгенерировали пару ключей SSH, чтобы иметь возможность войти на свой сервер без пароля, вам необходимо скопировать открытый ключ на сервер, которым вы хотите управлять.
Самый простой способ скопировать ваш открытый ключ на сервер — использовать команду . На вашем локальном машинном терминале введите:
Вам будет предложено ввести пароль :
После аутентификации пользователя открытый ключ будет добавлен в файл удаленного пользователя, и соединение будет закрыто.
Если по какой-либо причине недоступна на вашем локальном компьютере, вы можете использовать следующую команду для копирования открытого ключа:
-
Войдите на свой сервер с помощью ключей SSH
После выполнения описанных выше действий вы сможете войти на удаленный сервер без запроса пароля.
Чтобы проверить это, просто попробуйте войти на свой сервер через SSH:
Если все прошло успешно, вы сразу же войдете в систему.
Как настроить PuTTY
В настройках программы нет ничего сложного. Давайте откроем программу и посмотрим, что в ней есть. После запуска перед нами отобразится окно конфигурации приложения, где слева находятся различные категории, а справа – их настройки.
Программа включает в себя 4 основных раздела:
- Session — основная вкладка, предназначенная для подключения к удаленному компьютеру. Здесь вводятся параметры подключения, порт, адрес, а также вносятся так называемые пресеты, которыми можно воспользоваться, чтобы не вводить каждый раз данные для входа. Достаточно один раз прописать настройки сессии, сохранить ее и использовать при следующем запуске программы.
- Terminal — необходима для включения или отключения возможностей терминала.
- Window — здесь производятся все настройки интерфейса: внешний вид окна, цвет, шрифт и кодировка.
- Connection — настройка параметров подключения, алгоритма шифрования, сжатия, ключей аутентификации и других значений.
Нам потребуется всего две вкладки: Session и SSH. Первым делом перейдем ко второй и убедимся, что версия протокола стоит в значении «2». Как правило, сейчас используется понятие SSH-2, так как первая версия практически не применяется из-за существенных недостатков, например, ошибки в схеме обеспечения безопасности.
Вернемся к разделу Session, где находятся основные параметры, которые потребуются нам для подключения к серверу по SSH. Давайте немного остановимся и поговорим о них:
- Первый блок включает в себя основные параметры, необходимые для подключения: окно ввода IP-адреса и порта, строку с выбором типа подключения.
- Следующий блок предназначен для создания пресетов, которые можно использовать для быстрого подключения к удаленному компьютеру. В строку «Saved Sessions» вводится название сессии, оно сохраняется с помощью кнопки «Save». Чтобы воспользоваться сохраненным пресетом, достаточно его загрузить с помощью кнопки «Load».
- Последний блок – параметры закрытия окна при выходе. Доступные значения: always, never, only on clean exit.
Как видите, в настройках PuTTY нет ничего сложного. Теперь давайте перейдем к подключению по протоколу SSH.
Добавление пароля
При создании виртуальной машины или физического сервера в пункте «Дополнительные возможности» нажмите на «Пользовательские данные». Откроется окно, куда можно вписать скрипт для обработки cloud-init агентом, запущенным на машине.
Впишите в «Пользовательские данные» код:
#cloud-configpassword: ваш парольchpasswd: { expire: False }ssh_pwauth: True
С указанным паролем вы сможете подключаться к виртуальной машине или физическому серверу по SSH или через личный кабинет.
Пароль не обязательно добавлять в явном виде, можно вписать его хэш-сумму (тот же пароль, только преобразованный; машина сможет его считать, а вот для человека он выглядит как случайный набор символов). Тогда, даже если кто-то попадёт в систему, то всё равно не узнает пароль — внутри будет храниться хэш-сумма. А система даст войти только по паролю. Для генерации хэш-суммы вы можете воспользоваться скриптом на Python:
#!/usr/bin/env python3# based on https://stackoverflow.com/a/17992126/117471# pip3 install passlibimport sysfrom getpass import getpassfrom passlib.hash import sha512_cryptpasswd = input() if not sys.stdin.isatty() else getpass()print(sha512_crypt.hash(passwd , rounds = 5000 ))
Шаблоны в файле настроек SSH
Шаблон состоит из нуля или более символов, которые не являются белыми пробелами, ‘*’ (подстановочного символа, который соответствует нулю или более символам), а также ‘?’ (подстановочный символ, который соответствует ровно одному любому символу). Например, чтобы охарактеризовать любой хост в наборе доменов «.co.uk» можно использовать следующий шаблон:
Host *.co.uk
Следующий шаблон будет соответствовать любому хосту в сетевом диапазоне 192.168.0.:
Host 192.168.0.?
Список шаблонов — это несколько шаблонов, разделённых запятой. Шаблоны внутри списка могут иметь противоположное значение если перед ними стоит восклицательный знак («!»). Например, для разрешения ключа использовать откуда угодно внутри организации, кроме пула «dialup», можно использовать следующее (в authorized_keys):
from="!*.dialup.example.com,*.example.com"
Помните, что отрицательное совпадение никогда само по себе не даст положительных результатов. Например, попытка сопоставить хост «host3» следующими списку шаблонов не найдёт совпадений:
from="!host1,!host2"
Решением для предыдущей ситуации является включение термина, который приведёт к положительному совпадению, им может быть подстановочный символ:
from="!host1,!host2,*"
Подключение к серверу через SSH
Мы уже выяснили, что представляет собой SSH и команды для него. Теперь установим соединение с сервером.
Естественно, перед началом надо арендовать виртуальный хостинг или VDS у одного из доступных провайдеров. У Timeweb, к примеру.
Если у вас macOS или Linux
- Запускаем программу Terminal.
- Вводим в консоль команду со следующим синтаксисом ssh имя пользователя@адрес сервера. В моем случае это ssh [email protected].
- Указываем пароль суперпользователя (его отправляет хостинг-провайдер сразу после регистрации).
- Жмем Enter.
Все. Соединение установлено, можно переходить к работе непосредственно с сервером.
Если у вас Windows
- Скачиваем и устанавливаем программу PuTTY.
- В строку IP-адрес вводим адрес своего VDS или виртуального хостинга.
- Жмем на кнопку Open.
- Вводим пароль администратора, чтобы получить доступ к управлению.
Управление протоколом SSH
У команды для подключения к удаленному PC по SSH есть две важных опции:
- ssh -p номер порта имя пользователя@адрес сервера — заменяет стандартный 22-й порт на иной, что положительно сказывается на безопасности и устойчивости к автоматическим хакерским атакам от ботов.
- ssh-copy-id -i путь до файла с ключом имя пользователя@адрес сервера— копирует ключ на сервер, чтобы вход осуществлялся без логина и пароля, а именно через ключ.
Доступ по паролю или ключу
У нас уже есть защищённое соединение, и теперь мы можем вводить пароль. Для этого, после запуска нашей команды или клиента, SSH-сервер присылает в ответ такое:
Это значит, что нам нужно ввести пароль от пользователя с именем login. Пароль вводится каждый раз, когда мы устанавливаем SSH-соединение.
Есть и другой способ доказать серверу, что вы имеете право подключаться к нему: ключи доступа. Если настроить доступ по ключу, то пароль уже не нужен. Главное — нигде не публиковать приватный ключ. О ключах сейчас говорить не будем, сложновато.
Теперь соединение установлено, можно управлять удалённым компьютером, сидя у себя дома. Именно за это SSH и любят админы: лаконичный и понятный (для них) интерфейс, простота работы и полная безопасность при грамотной настройке.
Совместный доступ к консоли по ssh
Нет никаких проблем с тем, чтобы одновременно двум или более пользователям оказаться в одной консоли. Логика действий тут такая:
- Регистрируем нового пользователя в систему.
- Даем ему доступ к нужному Workspace.
- Открываем одним из пользователей соединение.
- Подключаемся вторым пользователем в это соединение.
Получится вот так. Вид от инициатора соединения.
Вид от второго пользователя, который подключился в консоль с правами на просмотр.
Права доступа пользователей можно настраивать с помощью ролей. По умолчанию идут две роли: admin с полным доступом и default с правами на просмотр всех логов команды. Вот пример создания роли с разрешением на просмотр только своих логов.
Можно сделать роль с правами только на просмотр логов, без возможности подключения. Функционал ролей пока не очень большой. Напоминаю, что продукт в бете и только выходит на широкую публику.
Разрешить SSH-доступ пользователю или группе
Чтобы разрешить доступ по SSH для определенного пользователя, например sk, отредактируйте файл sshd_config:
$ sudo vi /etc/ssh/sshd_config
Нажмите «i», чтобы войти в режим вставки и добавить или изменить следующую строку:
AllowUsers sk
Замените «sk» своим именем пользователя
Обратите внимание на отступы между «AllowUsers» и «sk». Вы должны использовать Tab вместо пробела
Значение — добавьте слово «AllowUsers» и нажмите клавишу Tab, а затем укажите имя пользователя.
Вы также можете указать более одного пользователя, как показано ниже.
AllowUsers user1 user2
Чтобы разрешить всю группу, например, root , добавьте/отредактируйте следующую строку:
AllowGroups root
Этот параметр позволит всем членам «корневой» группы подключаться к серверу Linux по ssh.
Нажмите клавишу ESC, чтобы выйти из режима вставки, и введите : wq, чтобы сохранить и выйти из файла конфигурации SSH. Перезапустите службу SSH, чтобы изменения вступили в силу.
$ sudo systemctl restart sshd
Теперь пользователю sk и всем членам «корневой» группы разрешено подключаться к вашему Linux-серверу по ssh. Остальные пользователи (кроме sk и членов группы «root») не имеют доступа к системе через ssh.
Чтобы проверить это, попробуйте подключиться к серверу Linux по ssh от имени любого из запрещенных пользователей:
$ ssh [email protected]
Вы получите следующее сообщение об ошибке:
[email protected]'s password: Permission denied, please try again.
Установка пакетов SSH
Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:
В Ubuntu
$ sudo apt-get install ssh
В CentOS
$ yum -y install openssh-server openssh-clients
После чего начнется процесс установки
Как видно, менеджер пакетов сам распознает все зависимые и связанные пакеты и установит их. Также, по завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
$ systemctl status sshd
или:
$ service sshd status даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.
Генерация SSH ключей в Linux/MacOS/Windows 10
Чтобы сгенерировать ключи на Linux/MacOS/Windows 10:
- Откройте консоль, терминал (MacOS) или командную строку (cmd.exe) для Windows 10.
- Выполните команду: «ssh-keygen -t rsa -b 2048».
- Укажите название ключа в строке «Enter file in which to save the key».
Внимание! Если не указывать директорию (например, «.ssh/» ), ключи сохранятся в «~./» (для Linux/MacOS) или в «C:Users» (для Windows 10)
- Нажмите «Enter».
- Далее задайте пароль для ключа или оставьте поле пустым и нажмите «Enter», если хотите создать ключ без пароля.
- Подтвердите пароль или оставьте поле пустым и нажмите «Enter» для сохранения ключа без пароля.
- Ключ создан в директории по умолчанию или в той, которую вы прописали.
- Публичная часть ключа будет сохранена в файле «<имя_ключа>.pub».
Используйте его для последующего добавления к виртуальной машине или физическому серверу. Файл можно открыть в текстовом виде в приложении «Блокнот».
Кому может быть полезен
Исходя из описанных возможностей, можно составить примерный список людей, которым это приложение может быть полезно.
- На первое место я бы поставил саппорт, который оказывает массовую поддержку пользователям. В таких сервисах неизменно присутствует текучка, поэтому вопрос безопасности и удобства стоит очень остро. Нужен полный контроль за подключениями, чтобы потом можно было проводить разбор полетов в случае конфликтных ситуаций. Да и доступ к серверам необходимо по возможности организовать удобно и безпроблемно как для клиента, так и саппорта.
- Всякого рода команды разработчиков, инженеров, сисадминов. С помощью Team Shell можно удобно организовать доступ по ssh к серверам. Не нужно создавать и раскатывать ключи по серверам. Достаточно всех завести в единую систему и там разграничивать доступ. Не нужно новому джуну с виндой и putty объяснять, как сделать нормальный ключ для подключения.
- Онлайн школы смогут вывести на новый уровень ведение занятий и проверку домашних заданий. Для каждого пользователя можно сделать отдельную тестовую лабу и контролировать ход обучения, подключаться к сессии ученика, проверять домашние задания.
- Любые другие пользователи, которые хотят заказать со стороны какую-то поддержку или настройку на своем сервере по ssh. При этом они хотят понимать и контролировать то, что будет сделано. Им не нужно будет передавать данные для авторизации на сервере по ssh. Достаточно будет предложить скачать клиент Team Shell и зарегистрироваться в нем. А потом уже через него осуществить доступ.
SSH-сервер
Устанавливается на управляемой операционной системе и принимает входящие подключения от клиентских машин, проверяя соединение одним из способов:
- по IP-адресу клиента, что не слишком безопасно из-за риска подмены;
- по публичному ключу клиента и имени пользователя. Нужно создать приватный (закрытый) и публичный (открытый) ключ. Зашифровав информацию одним ключом, можно расшифровать ее только другим;
- по паролю клиента, который передается в зашифрованном виде. Это один из наиболее распространенных вариантов. Вводить его нужно при каждом подключении.
Платные и бесплатные SSH-серверы есть для всех распространенных ОС:
- BSD — OpenSSH;
- Linux — dropbear, lsh-server, openssh-server;
- Windows — freeSSHd, copssh, WinSSHD, OpenSSH и т. д.
Настройка SSH
При изменении конфигурации SSH вы меняете настройки сервера sshd.
В Ubuntu основной файл конфигурации sshd находится в каталоге .
Выполните резервное копирование текущей версии этого файла перед началом редактирования:
Откройте файл в текстовом редакторе:
Скорее всего, вы захотите оставить большинство опций в этом файле без изменений
Однако существует несколько настроек, на которые вам стоит обратить особое внимание:. /etc/ssh/sshd_config
/etc/ssh/sshd_config
Объявление порта указывает, подключения к какому порту будет отслеживать сервер sshd. По умолчанию используется порт . Вам, скорее всего, не придется изменять данную настройку, если только у вас нет конкретных причин для иного решения. Если вы решите изменить порт, позже мы покажем, как подключиться к новому порту.
/etc/ssh/sshd_config
В объявлениях ключей хоста указывается, где нужно искать глобальные ключи хоста. Мы обсудим, что такое ключ хоста, позже.
/etc/ssh/sshd_config
Эти две строки указывают на уровень логирования, который необходимо использовать.
Если вы сталкиваетесь с проблемами при работе с SSH, увеличение объема логируемых данных может быть хорошим решением, которое поможет понять, в чем заключается проблема.
/etc/ssh/sshd_config
Эти параметры определяют некоторые данные для входа в систему.
Опция определяет количество секунд, в течение которых следует сохранять подключение при отсутствии успешных попыток входа в систему.
Возможно, вам может быть полезным задать для этого параметра чуть большее количество времени, чем то, которое вам обычно требуется для входа.
определяет, разрешен ли вход с помощью пользователя с правами root.
В большинстве случаев необходимо изменить значение на , если вы создали учетную запись пользователя, которая имеет доступ к высокому уровню привилегий (через или ) и может использоваться для входа в систему через ssh.
— это защитник, который будет препятствовать попыткам входа, если файлы аутентификации доступны для чтения всем.
Он позволяет предотвратить попытки входа в систему, когда файлы конфигурации не находятся в безопасном состоянии.
/etc/ssh/sshd_config
Эти параметры используются для настройки такой возможности, как X11 Forwarding. X11 Forwarding позволяет просматривать графический пользовательский интерфейс (GUI) удаленной системы на локальной системе.
Эта функция должна быть активирована на сервере и передана клиенту SSH во время подключения с помощью опции .
После внесения изменений сохраните и закройте файл, введя , , а затем нажмите .
Если вы внесли изменения в какие-либо настройки в файле , необходимо перезапустить ваш сервер sshd, чтобы изменения вступили в силу:
Вы должны тщательно протестировать ваши изменения, чтобы убедиться, что все работает так, как вы ожидаете.
Вы можете использовать несколько активных сеансов во время внесения изменений. Это позволит вам вернуться к первоначальной конфигурации, если это потребуется.
Управление пользователями
Так как Linux заточена под использование большим количеством людей одновременно, разработчики придумали для нее продвинутую иерархию пользователей. У каждого свой набор прав и свои возможности. И есть целый набор команд для работы с ними. Рассмотрим главные.
useradd — создает на сервере новую учетную запись. По сути, нового пользователя. Синтаксис: useradd имя будущей учетной записи. Имя можно указать любое на свой вкус. Потом останется лишь добавить для нового аккаунта пароль.
passwd — задает пароль для учетной записи. Работает вкупе с предыдущей командой. То есть сразу после создания аккаунта, пишем: passwd имя новой учетной записи. После этого система попросит придумать и указать пароль для новой учетной записи.
Система безопасности в Linux не показывает во время ввода пароля даже звездочки, но это не значит, что он не вводится. Продолжайте набирать вслепую, а как закончите, нажмите Enter, и все сработает. И не бойтесь запутаться, вас попросят повторить придуманный пароль.
userdel — удаляет выбранную учетную запись. Синтаксис: userdel имя учетной записи, которую нужно стереть
usermod — вносит изменения в характеристики существующих учетных записей, лишает их контроля или вовсе приостанавливает работу. Делает все, что не связано с созданием и удалением аккаунтов. Используется только вместе с дополнительными опциями:
- -с — добавляет комментарий к аккаунту (можно вписать любой текст по желанию, чтобы запомнить для чего нужен выбранный пользователь).
- -d — меняет расположение домашней директории выбранной учетной записи.
- -e — указывает время, которое будет существовать аккаунт (после этого сработает автоматический userdel).
- -g — меняет группу, к которой принадлежит аккаунт.
- -G — привязывает аккаунт к выбранной группе.
- -L — блокирует пользователя.
- -m — перемещает контент из домашней папки пользователя в другую папку.
- -p — устанавливает незашифрованный пароль (лучше так не делать).
- -s — задает конкретную оболочку для нового аккаунта на усмотрение администратора компьютера.
- -U — снимает блокировку с выбранной учетной записи.
Что такое SSH?
Поскольку эта статья рассчитана именно на новичков, то перед тем, как перейти дальше давайте подробнее разберемся что из себя представляет SSH. Исторически так сложилось что на большинстве серверов используется операционная система Linux, во многом этому посодействовала ее бесплатность. Графический интерфейс на серверах Linux не используется для экономии ресурсов, поэтому единственным способом администрирования сервера остается командная строка.
Но это не является недостатком, потому что в командной строке Linux можно сделать больше чем графическом интерфейсе. Протокол SSH позволяет вам выполнять команды в удаленной системе так, как будто вы это делаете в своей системе. Вам доступен буфер обмена, вы вводите команды и можете использовать их вывод. Недоступны разве что файлы из вашей файловой системы. Например, когда вы подключитесь к серверу по SSH из Ubuntu, то все будет выглядеть так, как будто вы открыли терминал в своей системе.
Работа с текстом
Парочка полезных команд для взаимодействия с любыми видами текстов на сервере через SSH.
cat — показывает текст из выбранного файла. В качестве аргумента передаем этой утилите текстовый документ, и cat выведет в консоль его содержимое. Синтаксис:
cat путь до файла, содержимое которого надо осмотреть
Чтобы взглянуть на содержимое файла timeweb.txt, который лежит на рабочем столе, напишем в терминал:
cat ~/Desktop/timeweb.txt
head — это «голова». Она работает по схожему с cat принципу. Отображает текст из файлов, где он имеется. Разница заключается в количестве отображаемого контента. Пользователь сам выбирает, сколько строчек текста вывести на экран, поставив аргумент -n. Команда head -n 4 ~/Documents/timeweb.txt покажет только первые четыре строки документа timeweb.txt из папки Documents.
tail — это «хвост». Работает, как head, но с противоположной стороны. Команда tail -n 8 ~/Documents/timeweb.txt покажет только первые восемь строк документа timeweb.txt из папки Documents.
touch — одна из множества команд для SSH, которую используют не по назначению. У нее весьма специфичная задача по изменению времени последнего открытия отдельных элементов файловой системы. Но ее быстро перепрофилировали чуть ли не в стандартный метод создания файлов. touch ~/Desktop/timeweb.html создаст HTML-документ с именем Timeweb на рабочем столе.
vi — используя с дополнительными аргументами, можно создавать новые текстовые файлы. Например vi /путь до директории, где нужно создать новый текстовый файл/. Или же редактировать уже существующие. Чтобы изменить содержимое какого-нибудь файла в домашней папке, надо ввести: vi /home/имя учетной записи/kakoy-to-tekstoviy-file.txt. Альтернативой vi может служить nano. Более современный и лояльный к новичкам редактор. К сожалению, может отсутствовать в системе по умолчанию и требовать установки.
wc путь до файла — показывает количество символов, количество строк и слов в выбранном текстовом документе.
grep — ищет конкретный кусочек текста в большом документе или распечатке из консоли. Чтобы дать понять, как он работает, покажу пример. Буду искать слово «немного» в файле timeweb.txt, лежащем у меня на рабочем столе. Сделаю это одной командой cat ~/Desktop/timeweb.txt | grep немного. Перед grep я использовал cat, чтобы вывести содержимое документа в консоль, а потом отфильтровать.
diff — сравнивает два файла и наглядно показывает строки, в которых обнаружились различия. Синтаксис: diff название первого файла название второго файла. Это может выглядеть так:
diff timeweb-1.html timeweb-2.html
Настройка аутентификации по ключу из Windows
Запускаем утилиту PUTTYGEN и нажимаем кнопку “Generate”. Для выполнения генерации необходимо произвольно перемещать указатель мышки по рабочему столу.
После того, как ключи сгенерированы, нажимаем кнопку “Save private key” и сохраняем файл с приватным ключом на диск. Место хранения закрытого ключа может быть произвольным, в дальнейшем в параметрях Putty потребуется указать путь к этому файлу. Далее выделяем и копируем в буфер обмена публичный ключ, отображаемый в верхней части окна.
Передачу публичного ключа на сервер выполним обычным копированием через окно терминала. Открываем Putty и подключаемся к серверу обычным способом.
Создадим в домашнем каталоге файл “.ssh/authorized_keys” и ограничим права других пользователей, так, чтобы доступ к этому файлу имел только владелец.
После создания файла запишем в него публичный ключ клиента. На предыдущем шаге публичный ключ был скопирован в буфер обмена. Для записи содержимого буфера обмена в файл воспользуемся командой cat и перенаправлением вывода.
После ввода команды щелкнем правой кнопкой мыши по окну терминала для вставки содержимого буфера обмена. Для завершения ввода нажимаем комбинацию клавиш “Ctrl+D” и отключаемся от сервера.
Далее укажем в параметрах Putty место хранения приватного ключа и снова выполним подключение к серверу.
Теперь для подключения к серверу достаточно ввести только имя пользователя. Если же вы попытаетесь подключиться с другой машины, на которой отсутствует приватный ключ, сервер снова запросит ввод пароля. После того, как аутентификация по ключу настроена, в целях безопасности вы можете изменить конфигурацию сервера и запретить вход по паролю.
Как выбрать интерфейс (IP) для прослушивания
В системе может быть несколько сетевых интерфейсов с несколькими IP адресами, по умолчанию sshd прослушивает их все, в том числе IPv6 адреса:
ListenAddress 0.0.0.0 ListenAddress ::
Если вы хотите, чтобы компьютер в локальной сети был доступен только для устройств в локальной сети, то можно указать его локальный IP:
ListenAddress 192.168.1.20
Кстати, смотрите статью «Как настроить Kali Linux на использование статичного IP адреса».
Директиву ListenAddress можно использовать несколько раз в одном конфигурационном файле. Разрешены следующие форматы:
ListenAddress hostname|address ListenAddress hostname:port ListenAddress IPv4_address:port ListenAddress :port
Если порт не указан, то sshd будет прослушивать на указанном порту в соответствии со всеми установленными опциями Port в этом файле.
Квалификатор rdomain является необязательным, он имеет отношение к маршрутизации.
Также обратите внимание, что с ListenAddress обязательно должен быть указано имя хоста (адрес) ИЛИ порт. Можно указать отдельно имя хоста (адрес), можно указать отдельно порт, а также можно указать их вместе
Во всех вариантах rdomain может отсутствовать.
Опции командной строки (об их использовании далее) имеют приоритет над директивами конфигурационного файла. В том числе опция для установки используемого порта приводят к тому, что Port в конфигурационном файле игнорируется. Но порты указанные с ListenAddress перезаписывают порты в строке команды.
Вы можете указать конкретный IP, который будет прослушиваться в ожидании подключений. А опцией AddressFamily вы можете выбрать для прослушивания все адреса, только IPv4 или только IPv6:
AddressFamily any
Варианты:
- any (по умолчанию — любые адреса),
- inet (использовать только IPv4),
- inet6 (использовать только IPv6),
Туннелирование в SSH
Чтобы использовать SSH безопасно, создается SSH-туннель. Это означает, что данные шифруются на одном конце SSH-соединения и расшифровываются на другом.
Для защиты данных нужно соблюдать правила:
- запретить удаленный root-доступ;
- выбрать нестандартный порт для SSH-сервера;запретить подключаться с пустым паролем или отключать вход по паролю;
- использовать длинные SSH2 RSA-ключи;
- ограничить количество IP-адресов, с которых возможен доступ;
- следить за сообщениями об ошибках аутентификации;
- запретить доступ с опасных адресов;
- установить системы для обнаружения вторжений (IDS — Intrusion Detection System).
- использовать ловушки. Например, Tarpit — это порт-ловушка для замедления входящих соединений. Если сторонняя система подключается к порту, быстро закрыть соединение будет невозможно. Она будет расходовать системные ресурсы и ждать, когда соединение прервется по тайм-ауту или будет разорвано вручную.
Хотя SSH — надежный протокол удаленного управления, он также имеет уязвимости. Следует постоянно помнить о том, что никакая защита не является совершенной, а лучшая из них — это внимательность и аккуратность пользователя.
Fail2ban для защиты SSH сервера
Самым действенным способом защиты SSH является защита от перебора паролей. Её может обеспечить утилита .
apt update
apt install iptables -y && apt install fail2ban -y
Настройка Fail2ban
Удаляем дефолтный файл настроек fail2ban для Debian
cat /dev/null >/etc/fail2ban/jail.d/defaults-debian.conf
Затем, запускаем создание собственного файла настроек
nano /etc/fail2ban/jail.d/sshd.conf
Открывается редактор, туда вписываем следующее: — меняете на свой IP (или диапазон, если IP динамический). Чтобы добавить несколько IP или диапазонов, указываем их через пробел.
enabled = true port = 9724 filter = sshd ignoreip = 127.0.0.1/8 logpath = /var/log/auth.log findtime = 300 maxretry = 3 bantime = 3600
- — по какому порту банить IP, попавший на . Если на сервере нестандартный порт SSH, укажите его здесь
- — белый список IP, меняем на свои значения
- — время, в течение которого можно ошибиться не более раз
- — максимальное число попыток авторизоваться по SSH в течение
- — время бана
Ещё можно добавить нижеследующий код в дополнение к вышеуказанному, он поможет от активного брутфорса пароля SSH ботнетами:
enabled = true filter = sshd logpath = %(sshd_log)s banaction = iptables-allports findtime = 1d maxretry = 21 bantime = 1w
banaction — как банить. Чтобы банить по всем портам, указываем iptables-allports, в таком случае, указывать port не обязательно
После внесения изменений нужно перезагрузить
Как проверить fail2ban
Чтобы проверить, верно ли работает , можно запустить клиента и проверить статус :
fail2ban-client status sshd
Если всё верно сделано, увидите надпись:
Status for the jail: sshd
Если что-то не так, то:
fail2ban : ERROR NOK: ('ssh',) Sorry but the jail 'ssh' does not exist
В таком случае, вернитесь выше и перепроверьте шаги настроек
Как сбросить бан fail2ban
Сбрасывает все баны всех IP всех служб:
fail2ban-client unban --all
Если нужно сбросить конкретную службу, например , и конкретный IP :
fail2ban-client set sshd unbanip 1.2.3.4
или все IP:
fail2ban-client set sshd unbanip --all
Если так случилось, что ваш IP забанен, и нет возможности его сменить, альтернативой для авторизации на сервере может стать , как правило, хостеры предоставляют отдельный доступ к нему. С помощью VNC вы сможете разбанить свой IP с помощью вышеуказанных команд
Сведения о парах ключей
Парой ключей называются файлы открытого и закрытого ключей, которые используются в некоторых протоколах аутентификации.
При аутентификации SSH на основе открытого ключа используются асимметричные алгоритмы шифрования для создания двух файлов ключей, один из которых считается закрытым, а второй открытым. Файлы закрытых ключей выполняют функцию паролей, а значит, должны быть постоянно защищены. Если кто-то получит ваш закрытый ключ, он сможет войти от вашего имени на любой сервер с поддержкой SSH, к которому у вас есть доступ. Открытый ключ размещается на сервере SSH. Его можно свободно распространять, не компрометируя закрытый ключ.
Если на сервере SSH используется аутентификация с помощью ключей, сервер и клиент SSH сравнивают открытый ключ, связанный с предоставленным именем пользователя, с закрытым ключом. Если открытый ключ на стороне сервера не проходит проверку по закрытому ключу, сохраненному на стороне клиента, аутентификация не будет выполнена.
Многофакторную проверку подлинности можно реализовать с помощью пар ключей, введя парольную фразу при создании пары ключей (см. раздел о ниже). При аутентификации пользователю предлагается ввести эту парольную фразу. Она применяется вместе с закрытым ключом для аутентификации пользователя.
Заключение
Интересно, вам так же как и мне понравился TeamShell? Поделитесь своим мнением. Несмотря на то, что продукт еще достаточно сырой, так как мы смотрим пока на beta, предлагаемый функционал очень интересен. Лично мне не известны аналоги. Я вижу, что он может закрыть несколько открытых потребностей пользователей. В основном в тех поддержке, распределенных командах и онлайн школах. Да и просто удобно кого-то запустить быстренько на сервер и посмотреть, что он там делал.
Даже если вы не админ, а владелец, к примеру, какого-то онлайн магазина, над которым работают фрилансеры по одиночным задачам. Попросите настроить вам Team Shell и пускайте на сервер только через него. Так у вас останется история того, что на сервере делали. Можно будет хоть какой-то аудит провести потом. А то у меня были ситуации, когда я подключался к серверу и видел там в списке последних команд полную очистку истории команд консоли.
На всякий случай напоминаю еще раз адрес сайта программы — https://teamshell.com.