SSH ч 3 Как подключиться к SSH Настройка клиента OpenSSH
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
SSH (ч.3): Как подключиться к SSH. Настройка клиента OpenSSH
Оглавление
Для подключения к SSH серверу нужен клиент SSH. Подключиться можно из любой операционной системы и даже с мобильного телефона.
Подключение к SSH из Linux
Вам нужно установить пакет ssh (содержит клиент и сервер SSH). На Debian и производных имеется отдельный пакет с клиентом ssh-client — достаточно установить только его или также пакет ssh.
Подключение к SSH из Windows
Для Windows имеются клиенты SSH, например PuTTY. Но это только клиент, без дополнительных возможностей — например, с PuTTY не получится создать ключи для входа на SSH без пароля. По этой причине я сам предпочитаю и рекомендую Cygwin (смотрите «Как начать знакомство с командами Linux: Cygwin»).
Эта программа содержит полнофункциональную версию SSH, в том числе вы без проблем сможете создавать ключи и выполнять другие типичные для SSH действия. По своей сути Cygwin реализует многие возможности командной строки Linux.
Подключение по SSH с мобильного телефона
Имеется большое количество бесплатных программ для подключения к SSH — поищите в магазине приложений «ssh client». Они различаются возможностями: поддержкой работы с ключами, возможность переходить в ландшафтный режим, удобство доступа к специальным клавишам и т. д. — просто выберите любой из них, который вам больше нравится.
На этом скриншоте я с телефона подключился к настольному компьютеру по SSH и запустил программу мониторинга Wi-Fi сетей. То есть я могу управлять системой Linux и наблюдать за результатами работы программ с телефона.
Как подключиться к SSH
Клиент SSH на Linux — это утилита командной строки, поэтому для ввода команд нужно открыть консоль. А пользователям Windows команды для подключения к SSH серверу нужно вводить в Cygwin.
Команда для подключения имеет следующий вид:
Всё, что помещено в квадратные скобки, является необязательным. То есть в самом простом варианте команда для подключения может быть такой:
В качестве АДРЕСАТа нужно указать IP к которому нужно подключиться или имя хоста. Поскольку пользователь не указан, то клиент SSH в качестве имени пользователя подставит имя пользователя в текущей сессии.
Типичная команда для подключения выглядит так:
В качестве ПОЛЬЗОВАТЕЛя нужно указать имя пользователя на удалённой системе, к которой выполняется подключение. В процессе подключения для этого пользователя нужно будет подтвердить свою личность — с помощью пароля или ключа.
Если КОМАНДА не указана, то будет открыт обычный интерактивный шелл к удалённой системе. Если КОМАНДА указана, то при успешном подключении она будет выполнена, а интерактивный шелл открыт не будет, ssh завершит свою работу после выполнения команды.
Также можно указать URI следующего формата:
Обратите внимание, что в предыдущей записи после двоеточия можно указать порт, для команды вида:
нельзя указать порт после двоеточия — для этого используется опция -p.
При первом подключении SSH выведет информацию с запросом:
Первая строка сообщает нам, что программа не может установить соединение с этим хостом — но не надо спешить расстраиваться.
Во второй строке нам показывают уникальный отпечаток удалённого хоста и спрашивают, хотим ли мы к нему подключиться?
Набираем: yes
Далее появляется сообщение, что хост добавлен в список известных хостов:
При последующих подключениях это сообщение показываться не будет.
Данная процедура — предупреждение о подключении к новым хостам — является надёжной защитой от спуфинга (подмены) IP адресов при подключении: если вы подключаетесь к одному и тому же хосту, то это сообщение больше не должно появляться. Если это сообщение появилось вновь, то это означает, что происходит подключение к какому-то другому хосту!
Чтобы закончить сессию (отключиться), наберите:
Или нажмите Ctrl+D.
Подключение к SSH по имени хоста
У меня есть VPS, у которой IP адрес 185.117.153.79, чтобы подключиться к ней я выполняю команду:
Но всё время держать в уме IP адрес неудобно, особенно если серверов несколько. Было бы удобнее, подключаться к хосту по легко запоминаемому имени. Это IP адрес сервера SuIP, поэтому в качестве короткого имени я выберу suip, а в качестве ещё более короткого псевдонима просто букву s.
Чтобы операционная система начала узнавать эти имена, нужно настроить файл hosts. В Windows этот файл размещён по пути C:\Windows\System32\drivers\etc\hosts, а в операционной системе Linux это файл /etc/hosts. Кстати, ещё больше подробностей об этом файле вы найдёте в статье «Как настроить локальный DNS используя файл /etc/hosts в Linux».
Итак, нужно добавить записи вида:
Для своего примера я добавляю такую строку:
Сохраняю и закрываю файл hosts. Теперь я могу подключиться к данному хосту набрав следующую команду:
Или даже в таком виде подключение также пройдёт успешно:
Ещё один вариант, как добиться этого же эффекта без редактирования системного файла hosts, будет чуть ниже.
Подключение по SSH к хосту в VPN
VPN, то есть виртуальная частная сеть, состоит из подключённых к ней хостов, которые могут быть разбросаны по всему миру, но которые благодаря VPN объеденены в одну локальную сеть, внутри которой каждый узел может связываться с другим по локальному IP адресу. Причём соединения надёжно зашифрованы и сторонние лица не смогут узнать, какой именно трафик передаётся внутри VPN.
Предположим, я хочу подключиться по SSH к компьютеру, который находится в VPN к которой я также подключён. В этом случае я могу подключиться указав IP интересующего меня компьютера в VPN сети, например:
Некоторую дополнительную информацию смотрите здесь.
Выполнение команд на удалённом сервере без создания сессии шелла
Кроме открытия сессии шелла на удалённой системе, ssh также позволяет выполнять отдельные команды на удалённой системе.
Например, для выполнения команды tree на удалённом хосте с IP адресом 192.168.1.36 и отображением результатов на локальной системе, нужно сделать так:
Используя эту технику, можно делать интересные вещи, вроде такой, как выполнение команды ls на удалённой системе и перенаправление вывода в файл на локальной системе:
Обратите внимание на одиночные кавычки в вышеприведённой команде. Это сделано потому, что мы не хотим, чтобы раскрытие пути было выполнено на локальной машине; поскольку нам нужно это выполнение на удалённой системе. Также если мы хотим стандартный вывод перенаправить в файл на удалённой машине, мы можем поместить оператор редиректа и имя файла внутри одиночных кавычек:
Передача стандартного вывода с локальной машины на удалённую по ssh
Не менее интересный вариант выполнения команд будет приведён немного ниже:
Команда cat построчно считывает и отображает содержимое файла .ssh/id_rsa.pub, расположенного на локальной машине.
| (труба) передаёт то, что должно было бы появиться в стандартном выводе, другой команде.
Вместо команды, которая должна была бы обрабатывать передаваемые ей строки, происходит соединение к удалённой системе (ssh mial@192.168.1.36).
На удалённую систему приходят строки, для которых предусмотрена команда cat >> .ssh/authorized_keys. Т.е. содержимое стандартного вывода построчно записывается в файл .ssh/authorized_keys, находящийся на удалённой машине.
Опции командной строки клиента SSH
У клиента SSH много опций командной строки, но они в большей части предназначены для перенаправления трафика и продвинутых случаев использования SSH. В этой части рассмотрим только некоторые из самых часто востребованных опций.
-p ПОРТ
Устанавливает порт, к которому нужно подключиться на удалённом сервере SSH. Портом по умолчанию является 22. Эту настройку можно установить в конфигурационном файле персонально для каждого хоста.
-E log_file
Добавляет отладочные логи к файлу log_file вместо стандартного вывода ошибок.
-F configfile
Определяет альтернативный файл конфигурации на уровне каждого пользователя. Если в командной строке указан файл конфигурации, системный файл конфигурации (/etc/ssh/ssh_config) будет проигнорирован. По умолчанию для файла конфигурации на уровне пользователя используется
Конфигурационные файлы клиента SSH
/etc/ssh/ssh_config
Общесистемный файл конфигурации клиента SSH.
/etc/ssh/ssh_known_hosts
Общесистемный список ключей известных хостов. Этот файл должен быть подготовлен системным администратором, чтобы он содержал открытые ключи хостов всех компьютеров в организации. Этот файл должен быть читаемым для всех.
Эта директива является стандартным расположением для хранилища конфигураций и информации для аутентификаций специфичных для пользователей. Нет требования хранить всё содержимое этой директории в секрете, но рекомендуется настроить разрешения на чтение/запись/выполнения так, чтобы они были у пользователя, но не были у других.
Это конфигурационный файл с настройками каждого пользователя. Из-за возможного злоупотребления этот файл должен иметь строгие разрешения: чтение/запись для пользователя и недоступность для записи другими.
Содержит список ключей хостов в которые входил пользователь, но которые отсутствуют в общесистемном списке ключей известных хостов.
Конфигурационные директивы файлов /etc/ssh/ssh_config и
Конфигурационные данные обрабатываются в следующем порядке и имеют следующий приоритет:
1. Опции командной строки
2. Файл со специфичными для пользователя настройками
3. Файл с общесистемными настройками /etc/ssh/ssh_config
Все значения конфигурации меняются только при первой их установке. Таким образом, специальные настройки хоста должны быть в начале, а значения по умолчанию в конце.
Конфигурационный файл клиента SSH поддерживает множество директив, но их настройка требуется для продвинутого использования SSH и для большинства случаев использования какие-либо настройки не требуются.
Необходимо отметить на специальные директивы Host и Match, которые разбивают файл на блоки.
Директива Host устанавливает имя хоста, к котором применяются все последующие настройки, пока не будет встречена другая директива Host или Match.
Если в качестве хоста указать ‘*’, то это позволяет задать глобальные настройки значений по умолчанию, применимые ко всем хостам.
Шаблон может иметь противоположное значение, если перед ним поставить восклицательный знак (‘!’). Если запись с отрицанием соответствует, то тогда пункт Host игнорируется, если не произойдёт совпадение с другими шаблонами. Следовательно, совпадения с отрицаниями полезны для обеспечения исключений из совпадений по подстановочным символам.
Далее показан небольшой фрагмент конфигурации, в которой для хоста 10.6.0.1 устанавливается порт подключения 55455, для хоста 192.0.100.8 в качестве порта подключения будет использован 2222, а для всех остальных хостов будет выполнено подключение к 22 порту:
Эти конфигурационные файлы содержат пары «ключевое слово — аргумент», одна пара на одной строке. Опционально аргументы можно заключить в двойные кавычки ("), чтобы передать аргументы, содержащие пробелы.
Ключевые слова не чувствительны к регистру, а аргументы чувствительны к регистру.
Многие директивы закомментированы, но они указывают на значение по умолчанию, которое всё равно используется. Если вас устраивает значение по умолчанию, то не нужно ничего менять. Если же вы хотите другое значение, то нужно раскомментировать строку с соответствующей директивой (убрать символ #) и внести изменения.
Параметры конфигурации могут быть разделены пробелами или необязательными пробелами и ровно одним ‘=’; последний формат полезен, чтобы избежать необходимости заключать значения с пробелами в кавычки при указании параметров конфигурации с использованием параметров ssh, scp и sftp -o.
Поскольку для каждого параметра используется первое полученное значение, в начале файла должны быть приведены более специфичные для хоста объявления, а в конце общие значения по умолчанию.
Выше уже рассмотрен пример подключения к удалённому SSH серверу по лаконичному имени вместо IP адреса. Это общесистемная настройка преобразования имени в IP адрес, в результате теперь имена suip и s можно использовать с любой программой — хоть в веб-браузере, хоть с утилитами, например с ping:
Но у ssh клиента есть свая собственная функциональность задать удобное (хорошо запоминающееся) имя хоста. Причём они позволяют сразу указать и порт, что с предыдущем методом сделать невозможно.
К примеру, IP адрес моего SSH сервера 185.117.153.79, его порт 54321 и я хочу добавить возможность подключаться к нему по имени Host, тогда в файл
/.ssh/config мне достаточно добавить следующее:
Как видим, используется директива HostName — она устанавливает настоящее имя хоста, в том числе можно указывать IP адрес.
Директива Port устанавливает порт, который должен использоваться для данного хоста.
В результате, теперь можно подключаться по обычной команде:
Либо применять её полный эквивалент:
С полным списком директив, которые можно использовать в конфигурационном файле, можно ознакомиться командой:
Для получения информации об опциях командной строки выполните:
Как указать файл ключа для подключения
По умолчанию приватный ключ для подключения к SSH берётся из файла
/.ssh/id_rsa. Если нужно подключиться к SSH серверу с другим ключом, то используйте опцию -i, после которой укажите путь до нужного файла с приватным ключом:
Источник
Как установить и настроить SSH
В этой статье мы расскажем, как работает SSH-клиент, как его установить, а также как подключиться к Ubuntu и Windows 10 по SSH. Но давайте сначала разберёмся, что такое SSH.
Что такое SSH
SSH (Secure Shell) — сетевой протокол прикладного уровня, который позволяет управлять операционной системой и выполнять функцию туннелирования TCP-соединения. Работа SSH построена на взаимодействии 2-х компонентов: SSH-сервера и SSH-клиента. Подробнее читайте в статье Что такое SSH.
SSH-сервер по умолчанию прослушивает соединения на порту 22, а также требует аутентификации сторон. Есть несколько вариантов проверки соединения:
- по паролю. Используется чаще всего. При таком типе аутентификации между клиентом и сервером создаётся общий секретный ключ: он шифрует трафик;
- с помощью ключевой пары. Предварительно генерируется открытый и закрытый ключ. На устройстве, с которого нужно подключиться, хранится закрытый ключ, а на сервере — открытый. При подключении файлы не передаются, система только проверяет, что устройство имеет доступ не только к открытому, но и к закрытому ключу.
- по IP-адресу. При подключении система идентифицирует устройство по IP-адресу. Такой тип аутентификации небезопасен и используется редко.
OpenSSH (Open Secure Shell) — набор программ, который позволяет шифровать сеансы связи в сети. При таких сеансах используется протокол SSH.
OpenSSH включает в себя компоненты:
- ssh,
- scp,
- sftp,
- sshd,
- sftp-server,
- ssh-keygen,
- ssh-keysign,
- ssh-keyscan,
- ssh-agent,
- ssh-add.
Этот набор ПО может аутентифицировать пользователей с помощью таких встроенных механизмов как:
- публичные ключи,
- клавиатурный ввод: пароли и запрос-ответ,
- Kerberos/GSS-API.
Установка OpenSSH на Ubuntu 20.04
В качестве примера мы рассмотрим установку Ubuntu 20.04. Настройка SSH Ubuntu Server 18.04 версии проходит аналогично.
При первой установке Ubuntu подключение по SSH запрещено по умолчанию. Включить доступ по SSH можно, если установить OpenSSH.
Источник
Руководство по команде SSH в Linux с примерами
SSH (Secure Shell) — это сетевой протокол, который обеспечивает безопасное удаленное соединение между двумя системами. Системные администраторы используют утилиты SSH для управления компьютерами, копирования или перемещения файлов между системами. Поскольку SSH передает данные по зашифрованным каналам, безопасность находится на высоком уровне.
Установка клиента OpenSSH
Есть много SSH-клиентов, бесплатных и платных, и OpenSSH является наиболее широко используемым клиентом. Он доступен на всех основных платформах, включая Linux, OpenBSD, Windows и macOS. Клиент OpenSSH предустановлен в большинстве дистрибутивов Linux по умолчанию, однако если в вашей системе не установлен клиент ssh, вы можете установить его с помощью диспетчера пакетов.
sudo apt install openssh-client
Как получить доступ к удаленному серверу
Для подключения к удаленному компьютеру вам потребуется его IP-адрес или имя. Загрузите терминал или любой SSH-клиент и введите ssh, а затем IP-адрес:
При первом подключении к хосту вы увидите следующее сообщение:
Введите yes и нажмите Enter. Возможно, вам также потребуется ввести свой пароль.
Укажите имя пользователя для SSH-подключения
SSH использует текущего пользователя при доступе к удаленному серверу. Чтобы указать пользователя для SSH-соединения, выполните команду в следующем формате:
Используйте другой номер порта для SSH-соединения
По умолчанию сервер SSH прослушивает соединение на порту 22. Если настройка порта в файле конфигурации SSH была изменена, вам необходимо указать порт. В противном случае вы получите такую ошибку:
Чтобы подключиться к удаленному хосту с настраиваемым номером порта SSH, используйте флаг -p. Например:
ssh test.server.com -p 3322
Генерация ключей SSH с помощью SSH Keygen
Чтобы повысить безопасность соединений SSH, сгенерируйте пару ключей с помощью утилиты keygen. Пара состоит из открытого и закрытого ключей. Открытый ключ может быть общим, а закрытый ключ должен оставаться в безопасности.
Пары ключей SSH используются для автоматической аутентификации клиентов на серверах. Когда вы создаете пару ключей SSH, больше не нужно вводить пароль для доступа к серверу.
На терминале хост-машины используйте эту команду для создания пары ключей:
ssh-keygen -t rsa
Чтобы использовать настройки по умолчанию, нажмите Enter в ответ на запрос местоположения файла и парольной фразы.
Копировать открытый ключ SSH
Чтобы использовать пару ключей для аутентификации SSH, вам необходимо скопировать открытый ключ на сервер. Ключ — это файл id_rsa.pub, ранее созданный с помощью утилиты генерации ключей SSH.
Чтобы скопировать ключ на сервер, запустите эту команду на клиенте:
Вы также можете указать имя пользователя, если не хотите использовать текущего пользователя.
Введите пароль для аутентификации, когда его спросят. После этого вам больше не нужно будет использовать пароль для подключения к тому же серверу.
Копирование файла удаленно через SSH с помощью SCP
Вы можете безопасно копировать файлы по протоколу SSH с помощью инструмента SCP . Базовый синтаксис:
scp fileName user@remotehost:/home/username/destination
Например, чтобы скопировать файл sample3 на рабочий стол на удаленном сервере с проверкой имени пользователя, введите:
scp sample3 test@10.0.10.5:/home/test/Desktop
Выходные данные показывают сводку операции.
Обязательно используйте флаг -P в верхнем регистре, если вам нужно указать порт.
Редактировать файл конфигурации SSH
Вы можете контролировать, как удаленные пользователи могут получить доступ к серверу через SSH. Измените настройки в файле sshd_config, чтобы настроить параметры сервера SSH. Обязательно редактируйте только те параметры, которые вам знакомы. Сервер может стать недоступным из-за неправильной конфигурации.
Используйте любой редактор по вашему выбору, чтобы отредактировать файл. Для внесения изменений вам потребуются права суперпользователя. В Linux мы используем vim.
В командной строке на удаленном хосте введите:
sudo vim /etc/ssh/sshd_config
Введите пароль sudo , и оболочка откроет файл в редакторе, который вы использовали.
Перезапустить службу SSH
Когда вы вносите изменения в конфигурацию SSH, вам нужно будет перезапустить службу в Linux.
В зависимости от дистрибутива Linux выполните одну из следующих команд на машине, на которой вы изменили настройки:
sudo ssh service restart
sudo sshd service restart
Наконец, введите пароль, чтобы завершить процесс. В результате в следующем сеансе SSH будут использоваться новые настройки.
Выполнение команды на удаленном сервере с локального компьютера
Этот метод не создает новую оболочку. Вместо этого он запускает команду и возвращает пользователя в локальную подсказку. Вы можете создать файл, скопировать файлы или запустить любую другую команду SSH в этом формате.
Чтобы удаленно выполнить команду с локального компьютера, добавьте инструкцию к команде SSH. Например, чтобы удалить файл, введите:
ssh test.server.com rm
Введите пароль, и файл на удаленном сервере будет удален без создания новой оболочки.
Параметры командной строки SSH
Инструмент SSH имеет множество дополнительных параметров. Ниже перечислены общие параметры SSH и соответствующие описания.
Источник
Установка и настройка сервера SSH в Linux
Secure Shell, т. е. SSH – протокол, обеспечивающий защищённые соединения и передачу данных между двумя удалёнными компьютерами. Изначально создавался на замену таким системам как rlogin и rcp. Как понятно из полного названия протокола, система SSH позволяет соединяться и управлять удалённым узлом (компьютером, маршрутизатором и т. д.), при этом защищая весь передаваемый трафик с помощью высоконадёжного шифрования.
SSH широко применяется администраторами серверов для их настройки и управления, да и обычные продвинутые пользователи — владельцы, например, сайтов или виртуальных серверов активно используют SSH для подключения к своей учётной записи на хостинге и использования командной оболочки сервера.
Сразу после окончания разработки система SSH стала активно трансформироваться в закрытый коммерческий продукт в виде версии SSH2. Но благодаря сообществу GNU версии протокола SSH1 и SSH2 были реализованы в виде открытого и свободно распространяемого ПО openSSH. В Linux-системах используется именно этот метапакет.
Метапакет SSH базово включает в себя сервер SSH (sshd) в качестве програмы-демона, а также несколько утилит: ssh – удаленная регистрация и выполнение команд, scp – передача файлов и ssh-keygen – для генерации пар SSH-ключей.
Установка пакетов SSH
Как уже говорилось система ssh в Linux-системах распространяется в виде составного метапакета, поэтому для установки всех требуемых утилит ssh нужно выполнить всего одну команду:
В Ubuntu
После чего начнется процесс установки
Как видно, менеджер пакетов сам распознает все зависимые и связанные пакеты и установит их. Также, по завершению установки, автоматически будет запущен SSH-сервер в режиме демона. Это можно проверить командой:
$ systemctl status sshd
или:
$ service sshd status даст тот же вывод. Теперь сервер работает с базовыми настройками по-умолчанию.
Настройка SSH
Режим работы SSH-сервера с настройками по-умолчанию хоть и является вполне работоспособным для небольших частных сетей, всё же нуждается в задании некоторых важных параметров для использования на высоконадёжных публичных серверах. Настройки демона хранятся в файле /etc/ssh/sshd_config. Посмотреть его можно командой
В первую очередь следует обратить внимание на следующие параметры: Port, AddressFamily, ListenAddress. Первый глобально задаёт номер порта, через который будет работать соединение и если оставить его стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами.
Примечание: для задания активации параметра необходимо раскомментировать соответствующую строку — убрать символ «#» в её начале.
Второй параметр задаёт семейство используемых IP-адресов — IPv4 и IPv6. Если, к примеру, используются только адреса IPv4, то очень рекомендуется установить для параметра
Для адресов семейства IPv6 используется значение inet6.
Параметр ListenAddress позволяет задавать порты для отдельных сетевых интерфейсов:
Поскольку реализация openSSH позволяет работать с протоколами SSH1 и SSH2, то разумно отключить использование SSH1, т. к. эта версия является устаревшей. Работа по SSH1 крайне не рекомендуется: Protocol 2
Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей:
Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл etc/.ssh/authorized_keys), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности:
AuthorizedKeysFile etc/ssh/authorized_keys # Для общего файла
AuthorizedKeysFile %h/.ssh/authorized_keys # Файл -> пользователь
Во втором варианте благодаря шаблону автоподстановки с маской «%h» будет использоваться домашний каталог пользователя.
Важно также отключать парольный доступ:
Или же, в случае, если всё-таки необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю:
Для указания разрешённых или запрещённых пользователей и групп служат директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Значениями для них являются списки имён, разделяемых пробелами, например:
Следует также отключать root-доступ:
Иногда, когда следует задавать мультисерверную конфигурацию, очень удобно использовать алиасы (Aliases), что позволяет настроить сразу несколько режимов доступа (с разными хостами, портами и т. д.) и использовать их, указывая при этом конкретный алиас:
Настройки для алиасов хранятся либо глобально в /etc/ssh/ssh_config, либо раздельно для пользователей в
/.ssh/config. Здесь нужно не спутать с ssh_config! Пример:
Для применения сделанных настроек необходим перезапуск SSH-сервера:
Настройка и использование клиента SSH
Для подключения по к серверу используется команда:
где user_name – имя пользователя в системе, host_name – имя узла, к которому производится подключение, например:
При этом утилита ssh запросит (в зависимости от настроек сервера) логин, пароль или парольную фразу для разблокировки приватного ключа пользователя.
В случае авторизации по ключу, должна быть предварительно сгенерирована пара SSH-ключей — открытый, который хранится на стороне сервера, обычно в файле .ssh/authorized_keys в домашнем каталоге пользователя, и закрытый — используется для авторизации клиента и хранится, как правило, в каталоге .ssh/ домашней директории пользователя. Открытый ключ представляет собой «цифровой слепок» закрытого ключа благодаря которому сервер «знает», кто «свой», а кто «чужой».
Для генерации ключей используется утилита ssh-keygen:
Утилита предложит выбрать расположение ключей (лучше всё оставить по-умолчанию), обычно это каталог
/.ssh/, ввести парольную фразу для закрытого ключа. После чего будут сгенерированы открытый ключ id_rsa.pub и закрытый — id_rsa. Теперь нужно скопировать открытый ключ, т. е. «слепок» закрытого на сервер. Проще всего этого можно добиться командой:
Теперь можно выполнить подключение командой ssh и запустить защищённый сеанс удалённого управления.
Важно заметить, что использование сгенерированных openSSH-ключей несовместимо с PPK-форматом, используемым по-умолчанию в таких комплексах как PuTTY. Поэтому необходимо конвертировать имеющиеся openSSH-ключи в формат PPK. Удобнее всего это делать с помощью утилиты PuTTY – puttygen.exe.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как пользоваться SSH
SSH — (Secure Shell) — это протокол удаленного управления компьютером с операционной системой Linux. В основном ssh используется для удаленного управления серверами через терминал. Если вы администратор нескольких серверов или даже продвинутый веб-мастер, то наверное, вы часто сталкиваетесь с необходимостью работать с тем или иным компьютером по ssh. В Linux для этого используется сервер ssh на машине, к которой нужно подключится и клиент, на той из которой подключаются.
В этой инструкции мы рассмотрим как пользоваться ssh, а также ее возможности, о которых вы даже не знали. Скорее всего, вы уже знаете как подключиться к серверу по ssh, но у этой утилиты есть еще много возможностей, таких как передача файлов ssh, подключение без пароля или выполнение скрипта на удаленном сервере. Все это мы и рассмотрим далее в статье. Но начнем с самых основ.
Базовый синтаксис
Синтаксис команды выглядит следующим образом:
$ ssh [опции] имя пользователя @ сервер [команда]
Важно заметить что ssh может работать по двум версиям протокола. Версии 1 и 2. Понятное дело, что версия 2 лучше и поддерживает больше типов шифрования и аутентификации. Больше в этой статье об отличиях протоколов мы говорить не будем и я буду подразумевать что вы используете версию 2.
Опции команды SSH
Теперь давайте рассмотрим самые основные опции команды ssh:
- f — перевести ssh в фоновый режим;
- g — разрешить удаленным машинам обращаться к локальным портам;
- l — имя пользователя в системе;
- n — перенаправить стандартный вывод в /dev/null;
- p — порт ssh на удаленной машине;
- q — не показывать сообщения об ошибках;
- v — режим отладки;
- x — отключить перенаправление X11;
- X — включить перенаправление Х11;
- C — включить сжатие.
Это далеко не все опции утилиты, остальные выходят за рамки данной статьи. Многие настройки работы ssh можно изменять через конфигурационный файл
/.ssh/config но здесь мы это тоже подробно рассматривать не будем.
Настройка сервера SSH
Настройки сервера SSH находятся в файле /etc/ssh/sshd_config. Многие из них мы тоже трогать не будем. Рассмотрим только самые интересные. Сначала откройте файл /etc/ssh/sshd.conf
Порт ssh
По умолчанию ssh работает на порту 22. Но такое поведение небезопасно, поскольку злоумышленник знает этот порт и может попробовать выполнить Bruteforce атаку для перебора пароля. Порт задается строчкой:
Поменяйте значение порта на нужное.
Протокол SSH
По умолчанию сервер ssh может работать по двум версиям протокола, для совместимости. Чтобы использовать только протокол версии два раскомментируйте строчку:
И приведите ее к такому виду:
Рут доступ
По умолчанию Root доступ по ssh разрешен, но такое поведение очень небезопасно, поэтому раскомментируйте строчку:
Доступ только определенного пользователя к SSH
Мы можем разрешить доступ к ssh только для определенного пользователя или группы. Для этого добавьте строчки:
AllowUsers User1, User2, User3
AllowGroups Group1, Group2, Group3
Здесь User1 и Group1 — пользователь и группа к которым нужно разрешить доступ.
Выполнение X11 приложений
Не все знают но есть возможность использовать ssh для запуска полноценных X11 приложений. Об этом мы поговорим ниже, но чтобы все заработало необходимо разрешить эту возможность на стороне сервера, добавьте такую строчку:
Основные опции рассмотрели, перед тем как переходить дальше, не забудьте перезагрузить ssh сервер чтобы сохранить изменения:
service sshd restart
Использование SSH
Основная цель этой статьи — показать интересные и полезные способы использования ssh, о которых, возможно, вы не знали. Переходим к самому вкусному — возможности ssh.
Подключение к серверу
Чтобы просто подключиться к серверу по SSH используйте такую команду:
Выполнить команду
Мы привыкли подключаться к удаленному серверу, а уже потом выполнять нужные команды, но на самом деле утилита ssh позволяет сразу выполнить нужную команду без открытия терминала удаленной машины. Например:
ssh user@host ls
Выполнит команду ls на удаленном сервере и вернет ее вывод в текущий терминал.
Выполнить локальный скрипт
Выполним интерпретатор bash на удаленном сервере и передадим ему наш локальный скрипт с помощью перенаправления ввода Bash:
ssh user@host ‘bash -s’ < script.sh
Бекап на удаленный сервер и восстановление
Мы можем сохранять бекэп диска сразу на удаленном сервере с помощью ssh. Перенаправим вывод dd с помощью оператора перенаправления |, затем сохраним его на той стороне в файл:
sudo dd if=/dev/sda | ssh user@host ‘dd of=sda.img’
Теперь чтобы восстановить состояние диска из сделанной копии выполните:
ssh user@host ‘dd if=sda.img’ | dd of=/dev/sda
Здесь и выше /dev/sda имя файла вашего жесткого диска.
Аутентификация без пароля
Использование ssh пароля для входа на сервер не только неудобно но и небезопасно, потому что этот пароль в любой момент может быть подобран. Самый надежный и часто используемый способ аутентификации — с помощью пары ключей RSA. Секретный ключ хранится на компьютере, а публичный используется на сервере для удостоверения пользователя.
Настроить такое поведение очень легко. Сначала создайте ключ командой:
ssh-keygen -t rsa
Во время создания ключа нужно будет ответить на несколько вопросов, расположение оставляйте по умолчанию, если хотите подключаться без пароля — поле Passphare тоже оставьте пустым.
Затем отправляем ключ на сервер:
Вот и все. Теперь при попытке подключится к этому серверу пароль запрашиваться не будет, а стазу произойдет подключение. Смотрите подробнее создание открытого ключа для ssh.
Взять пароль из локального файла
Напомню, что хранить пароли в обычных текстовых файлах небезопасно, но если хотите, то да — возможно. Для этого используется оператор перенаправления ввода Bash:
ssh user@host < local_file.txt
Изменить приветствие SSH
При входе по ssh может выводиться приветствие, изменить его очень легко. За это отвечает файл /etc/issue. Просто откройте этот файл и введите нужный текст:
Смотрим неудачные попытки входа SSH
Хотите посмотреть были ли попытки неудачного доступа по ssh к вашему серверу и с каких IP адресов? Запросто, все запросы логируются в файл /var/log/secure, отфильтруем только нужные данные командой:
cat /var/log/secure | grep «Failed password for»
Передача файлов по SSH
Кроме выполнения команд, можно копировать файлы по ssh. Для этого используется утилита scp. Просто укажите файл, который нужно передать, удаленный сервер и папку на сервере, вот:
$ scp /адрес/локального/файла пользователь@ хост: адерс/папки
Кроме утилиты scp, передача файлов ssh может быть выполнена более хитрым способом. Прочитаем файл и с помощью cat, передадим, а там сохраним поток в файл:
cat localfile | ssh user@host «cat > remotefile»
ssh user@host «cat > remotefile» < localfile
Пойдем еще дальше, вы можете сжимать файлы перед передачей с помощью tar, а потом их сразу же на лету распаковывать:
tar czf — /home/user/file | ssh user@host tar -xvzf -C /home/remoteuser/
Такое копирование файлов ssh позволяет отправлять сразу целые папки.
Запуск графических приложений по ssh
Если вам нужно запустить то или иное графическое приложение на удаленной машине необязательно для этого использовать VNC, вы можете обойтись возможностями ssh. Программа будет выполняться на стороне сервера, а вам будет лишь транслироваться окно, чтобы вы могли сделать все что нужно. Причем все данные шифруются. Чтобы эта функция работала, нужно включить ее поддержку на стороне сервера.
Затем просто выполняем команду запуска графического приложения на удаленном сервере вот таким образом:
ssh -XC user@remotehost «eclipse»
Как вы уже видели опция X разрешает перенаправление X11 на стороне клиента, а С — сжатие данных.
Завершение сессии SSH
Если вы использовали SSH с нестабильным интернетом, когда соединение время от времени рвется, то вам уже, наверное, надоело закрывать терминал, потому что иначе, на первый взгляд, сеанс никак не прекратить. Когда соединение с удаленным сервером разорвано вы не можете ввести никакую команду и сочетания клавиш Ctrl+C, Ctrl+Z, Ctrl+D не работают. И не будут работать поскольку клиент пытается отправить эти команды на сервер. Но есть решение — Escape последовательности. Чтобы активировать их поддержку добавьте строку:
В файл /etc/ssh/ssh_config. Теперь, чтобы разорвать SSH соединение достаточно нажать Enter и набрать:
Другие управляющие символы можно узнать нажав:
Туннели SSH
С помощью SSH туннелей вы можете пробросить порт с удалённого сервера на локальную машину. Это очень полезно, в первую очередь, для разработчиков. Для того чтобы пробросить порт с удалённой машины локальной используйте опцию -L и такой синтаксис:
$ ssh -L локальный_порт :удаленный_адрес : удаленный_порт пользователь@сервер
Например, сделаем удалённую базу данных доступной локально на порту 5555. Для этого выполните подставив свои значения:
$ ssh -N -L 5555:127.0.0.1:3306 root@losst-1
Опция -N сообщает, что команду на удалённой машине выполнять не нужно. Локальный порт — 5555, поскольку сервер баз данных слушает на локальном интерфейсе удалённой машины, то и здесь надо указывать адрес 127.0.0.1. А порт MySQL по умолчанию 3306. Если же вы хотите чтобы локальный сервис был доступен на удалённой машине, то следует использовать опцию -R:
$ ssh -N -R 5555:127.0.0.1:3306 root@losst-1
Теперь локальная база данных на порту 3306 будет доступна на удалённом сервере при обращении к порту 5555.
Выводы
Теперь вы знаете как пользоваться SSH. Как видите, технология SSH позволяет сделать намного больше чем можно предположить с первого взгляда, и это еще далеко не все. Какие интересные возможности SSH используете вы при повседневной работе? Поделитесь в комментариях!
Источник