ssh web что такое
За что админы любят SSH
И почему вам тоже нужно его полюбить.
Представим ситуацию: ваш сайт перестал работать, панель управления хостингом не открывается, а вам нужно всё починить. Или такое: вы работаете в Брянске, ваш заказчик — в Сыктывкаре, и у него сломался интернет-магазин на собственном сервере.
Тут два варианта: можно физически приехать в нужный город, подключить клавиатуру к серверу и исправить всё на месте. А можно подключиться к серверу удалённо по SSH и поисправлять все ошибки, попивая сок у себя в квартале (в Брянске).
SSH — это защищённый протокол, по которому компьютеры могут отправлять друг другу команды и данные. В нашем случае с помощью SSH можно удалённо управлять каким-нибудь компьютером: давать ему команды, исполнять на нём программы и делать что угодно ещё, что позволит нам командная строка. Если удалось связаться с компьютером по SSH, то это как будто вы подключили к удалённому компьютеру свою клавиатуру.
Командная строка
Если вы подключитесь к другому компьютеру по SSH, вы не увидите там рабочий стол и окна программ. Вы увидите чёрный экран и строки текста. Это нормально. Это называется командной строкой. Сейчас вы поймёте.
Когда вы работаете за компьютером, вы обычно видите окна, кнопки, страницы и всё подобное. Это называется графическим интерфейсом.
Графический интерфейс — это не сами программы. Это лишь способ представления программы. Сама программа — это то, что исполняется внутри компьютера: то, что считает, копирует, обрабатывает и так далее. Есть огромное количество программ без графического интерфейса: например, веб-сервер Apache — это программа. Сервер работает на вашем компьютере, занимает память, выдаёт страницы куда нужно, ведёт свою серверную работу, но у него нет графического интерфейса — нет никакого окошка, на которое вы можете сказать «Это сервер».
Или, например, ваш браузер. Если у вас Chrome, то вы видите окно с веб-страницей. А есть версия Headless Chrome, которая может выплёвывать любые страницы в виде картинок прямо на ваш жёсткий диск. У этого «Хрома» нет графического интерфейса со страницей (но есть небольшой интерфейс для настройки).
С нашей человеческой точки зрения интерфейс — это и есть программа. А с точки зрения компьютера интерфейс — это что-то побочное. И опытные программисты довольно часто используют в работе программы, у которых нет графического интерфейса, только командная строка.
Командная строка — это текстовый интерфейс программы. Вы вводите в эту строку команду, программа может в ответ что-то вас спросить текстом, вы ей текстом ответите, и программа сделает свою работу. Мы уже сталкивались с командной строкой, когда собирали своё приложение в электроне или объясняли, как устроен интернет:
Здесь в командной строке пользователь maximilyakhov на компьютере iMac-Maxim выполнил команду ping для адреса thecode.media — то есть проверил, откликается ли сервер с нашим сайтом. Это видно из второй строки. Программа Ping стала показывать статистику: получили пакеты по 64 байта за 79 мс. Пользователь удовлетворился результатом, вышел из программы клавишей Ctrl+C и получил итоговую статистику. Сейчас командная строка готова к новым командам
Бывают и другие интерфейсы программ. Например, может быть голосовой интерфейс: компьютер вас слушает, интерпретирует команды, задаёт вам вопросы голосом.
Может быть интерфейс в виде чата. Вместо того чтобы давать текстовые команды в командной строке, вы пишете команды чат-боту.
Может быть даже физический интерфейс: когда вы играете в приставку, вы даёте команду с помощью джойстика или каких-нибудь палок с датчиками. Когда в вас попадают враги, джойстики могут вибрировать — это приставка вам пытается что-то сказать. Так что графический интерфейс — это лишь одна из разновидностей.
SSH-соединение
Основной принцип работы такой: SSH-клиент на компьютере соединяется с SSH-сервером, они убеждаются, что каждый именно тот, за кого себя выдаёт, договариваются о шифровании и после этого устанавливают защищённый туннель для передачи команд. Важно понимать, что сервер — это просто такое название для удалённого компьютера. Сервером может быть и домашний ноутбук, и плата на Raspberry Pi.
Запуск SSH-клиента
Здесь login — это имя пользователя, под которым вы хотите зайти на сервер, а 11.22.33.44 — IP-адрес этого сервера. Чаще всего используется 22 порт, но иногда эта настройка может меняться.
Порт — это что-то вроде номера маршрутки, которая идёт по городу. Все привыкли, что если нужно «доехать» до SSH, то садятся на маршрутку номер 22. Но иногда начальник городского транспорта (администратор) может поменять номер, тогда вместо 22-й маршрутки нужно будет садиться, например, на 320-ю.
У Виндоус нет встроенного SSH-клиента, поэтому нужно скачать его отдельно. Чаще всего выбирают PyTTY — SSH-клиент с графической оболочкой, в которой можно настраивать параметры соединения:
Минимально нужно указать адрес сервера, 22 порт уже написан по умолчанию.
Обмен ключами шифрования
Когда мы запускаем SSH-клиент и говорим ему соединиться с нужным сервером, происходит следующее:
Если всё прошло штатно, то при самом первом подключении сервер пришлёт в ответ что-то вроде этого:
The authenticity of host ‘11.22.33.44 (11.22.33.44)’ can’t be established.
ECDSA key fingerprint is fd: fd: d4:f9:77:fe: 73:84:e1:55:00:ad: d6:6d: 22:fe.
Are you sure you want to continue connecting (yes/no)?
Здесь сервер спрашивает, точно ли мы хотим установить это соединение. Если да — вводим в ответ yes. Это значит, что мы получили уникальный «отпечаток пальцев» для нашего соединения. Теперь, когда поменяются настройки SSH-сервера или его полностью переустановят, отпечаток уже не совпадёт и клиент будет бить тревогу. Всё для того, чтобы сделать соединения более безопасными в будущем.
Доступ по паролю или ключу
У нас уже есть защищённое соединение, и теперь мы можем вводить пароль. Для этого, после запуска нашей команды или клиента, SSH-сервер присылает в ответ такое:
Это значит, что нам нужно ввести пароль от пользователя с именем login. Пароль вводится каждый раз, когда мы устанавливаем SSH-соединение.
Есть и другой способ доказать серверу, что вы имеете право подключаться к нему: ключи доступа. Если настроить доступ по ключу, то пароль уже не нужен. Главное — нигде не публиковать приватный ключ. О ключах сейчас говорить не будем, сложновато.
Теперь соединение установлено, можно управлять удалённым компьютером, сидя у себя дома. Именно за это SSH и любят админы: лаконичный и понятный (для них) интерфейс, простота работы и полная безопасность при грамотной настройке.
Что можно делать с помощью SSH
Всё, что можно было бы делать, если бы вы сидели за компьютером, открыв командную строку:
Вот несколько примеров из реальной жизни:
У вас намертво завис процесс веб-сервера на удалённом компьютере, и никакие внутренние службы не могут с ним ничего сделать. Подключаетесь по SSH, находите зависший процесс и убиваете его. А то и говорите машине перезагрузиться.
В офис вашей компании ворвались бойцы в масках. Пока они идут в серверную, вы набираете команду стереть все жёсткие диски. Команда по SSH долетает до сервера, и вуаля. Господа в масках останутся не при делах.
Вы написали телеграм-бота и хотите, чтобы он работал на удалённом сервере. Вы арендуете ячейку на Digital Ocean, подключаетесь к ней по SSH, загружаете вашего бота туда и активируете. Теперь программа, которая отвечает за бота, крутится на удалённом сервере, а ваш компьютер можно безопасно выключить.
Вы уже ушли с работы, как вдруг вспомнили, что забыли скинуть в общий проект свои последние изменения. Пока вы ждёте метро, вы с телефона заходите по SSH на рабочий компьютер и пишете команды, чтобы последние изменения долетели до коллег.
У вашей девушки (или парня) сегодня день рождения. Вы подключаетесь к её компьютеру дистанционно, загружаете приложение с поздравлением и удалённо запускаете. Это очень крипово, не делайте так никогда.
У вас в офисе есть кофемашина, которая поддерживает SSH. Вы подключаетесь к ней и заказываете кофе. К моменту, как вы доходите до кофепойнта, ваш кофе готов. Но кто подставит кружку?
Что такое протокол SSH
SSH — защищенный протокол для удаленного доступа к компьютерам. Через SSH можно выполнять операции в командной строке компьютера, который физически находится в другом месте.
Иными словами, SSH — это дистанционная командная строка. Визуально вы работаете на своем компьютере, но в реальности — на другом.
Что значит «протокол»?
Протокол — это набор соглашений, правил, по которым разные программы могут обмениваться информацией. SSH — это набор правил, который известен и вашему компьютеру, и физически отдаленному компьютеру.
Пример: вы вводите команду удаления файла, и эта команда передается на другой компьютер и выполняется там. Ответ (или сообщение об ошибке) возвращается и показывается на вашем компьютере.
Что значит «защищенный»?
Вся информация передается в зашифрованном виде. Подобно тому, как некоторые сайты работают по HTTPS, шифруя информацию. Например, ваш онлайн-банкинг обязательно должен работать по защищенному соединению. В таком случае даже если всю информацию перехватывает злоумышленник, он не сможет расшифровать её.
Для чего нужен SSH?
Не всегда есть возможность физически находиться у компьютера, с которым нужно работать. Например, если вы хотите создать свой сайт, то он будет размещен на компьютере хостинг-провайдера. Этот компьютер может находиться на другом конце света. Вам нужен способ запускать команды на этом компьютере не выходя из своего дома.
Как подключаться по SSH?
Для подключения к удаленной машине по SSH нужен клиент — специальная программа. В *nix-подобных системах (Linux, macOS) клиент обычно установлен в системе по умолчанию, и достаточно открыть терминал. В Windows нужно скачать сторонний клиент, например, Putty.
Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт. Вот как выглядит команда при использовании консольного клиента (в терминале):
Например, для подключения к серверу 52.307.149.244 в аккаунт ivan нужно ввести:
В графическом клиенте вроде Putty нужно ввести ту же информацию в соответствующие поля:
Fingerprint
При первом подключении появится сообщение:
Введите yes в первый раз.
Это нужно для повышения безопасности. При настройке SSH-сервера создается уникальная комбинация символов — fingerprint («отпечатки пальцев»). Ваш компьютер запоминает эту комбинацию и сверяет ее при каждом новом соединении. Если кто-то переустановит SSH-сервер, или всю операционную систему, или вообще заменит удаленный компьютер, сохранив его адрес, то при следующем соединении вы узнаете об этом, потому что изменится fingerprint.
Если fingerprint не меняется, то такое сообщение не будет появляться.
Подключение по SSH по паролю
Простейший вариант — подключение по паролю. После ввода команды ssh система запросит пароль:
Пароль придется вводить каждый раз.
Подключение по SSH по ключу, без пароля
Для удобного подключения по SSH (и многим другим сервисам) без ввода пароля можно использовать ключи.
Нужно создать пару ключей: приватный (закрытый) ключ и публичный (открытый) ключ. Приватный ключ нужно хранить и никогда никому не показывать. Публичный ключ можно показывать всем и распространять свободно.
Эти ключи связаны друг с другом таким образом, что зашифровав информацию одним ключом, расшифровать ее можно только другим. Например, если ваш друг зашифрует письмо вашим публичным ключом, то прочитать его сможете только вы, потому что для этого нужен ваш приватный ключ. И наоборот: если вы зашифруете что-то своим приватным ключом, то расшифровать его можно только вашим публичным ключом. Так как публичный ключ доступен всем, любой может расшифровать это сообщение. Но он может быть уверен, что сообщение пришло именно от вас. В этом заключается идея цифровой подписи.
Генерация ключей
Создадим пару ключей:
Программа запустится и спросит, куда сохранять ключи:
Программа запросит passphrase. Это вроде пароля для ключа. Можно просто нажать Enter и пропустить этот шаг. Или ввести passphrase — тогда его нужно будет вводить каждый раз, когда используется ключ.
Теперь у вас есть два файла:
/.ssh/id_rsa — приватный ключ. Никогда никому и никуда не передавайте его!
/.ssh/id_rsa.pub — публичный ключ. Спокойно распространяйте его.
В Windows можно использовать ssh-gen в подсистеме Ubuntu for Windows или в командной строке Git for Windows. Или создавать ключи графической утилитой вроде PuTTYgen.
Загрузка публичного ключа на сервер
Нужно добавить публичный ключ на сервер в файл
Другой способ — подключиться по паролю, открыть в редакторе файл
/.ssh/authorized_keys и добавить в конец текст из вашего файла
После включения соединений по ключу рекомендуется отключить подключение по паролю.
ssh-agent
При работе с ключами возможны две неудобные ситуации:
ssh-agent решает эти проблемы. Этот агент аутентификации (authentication agent) работает на фоне в *nix-системах. В зависимости от системы, вам, возможно, придется установить и настроить его автозапуск самостоятельно.
Если добавить ключ к агенту, то:
ssh-add /home/demo/.ssh/id_rsa добавит ключ id_rsa в запущенный в системе агент. Если у него есть passphrase, то агент попросит ввести его.
Если запустить ssh-add без аргументов, то будут добавлены ключи
ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.
Форвардинг (проброс) ключей
Если вы подключились к удаленному серверу X, и с него хотите подключиться к другому серверу Y, например, чтобы сделать git pull с GitHub’а, то придется держать копию ваших ключей на сервере X.
Ключи, добавленные к агенту аутентификации (ssh-agent) станут доступными на удаленном сервере. При этом файлы-ключи физически не будут находиться на сервере.
Частые вопросы
Чем Telnet отличается от SSH?
Telnet это конкретная программа с графическим интерфейсом, с помощью которой можно соединяться по SSH. Обычно ей пользуются только Windows пользователи, в Linux и MacOS используют консольную утилиту ssh.
Ssh web что такое
SSH-доступ используется для управления VPS/VDS и выделенных серверов, а также активно применяется в хостинге. Мы рекомендуем SSH только пользователям с навыками системного администратора.
Как работает SSH
Подключение по SSH применяет логин на сервере, а SSH-пароль является паролем этого пользователя.
SSH-сервер передает данные входящих соединений на 22-ом TCP-порте сервера хоста, но администратор сервера может назначить любой порт, исходя из соображений безопасности.
Для шифрования SSH использует специальные ключи, с помощью которых кодируются все передаваемые между клиентом и хостом данные.
В протоколе SSH используются три различных метода шифрования:
Симметричное шифрование
При симметричном кодировании один и тот же секретный ключ используется для шифрования и дешифрования пакетов данных и клиента, и хоста.
При установке соединения специальный алгоритм обмена ключами предварительно согласовывает ключ шифрования и потом использует его на протяжении всей сессии.
Асимметричное шифрование
Если вы используете для авторизации вместо пароля пару приватный+публичный ключ, то SSH применяет ассиметричное шифрование на этапе установки соединения. О том, как сгенерировать пару “приватный+публичный ключ”, читайте ниже.
Алгоритм подключения с асимметричными ключами работает так:
1. Хост и клиент используют свои публичные ключи для генерации общего секретного ключа шифрования сессии.
2. Затем хост шифрует данные публичным ключом и предлагает клиенту расшифровать их своим приватным ключом.
3. Если операция успешна, то клиент авторизуется на хосте с соответствующим именем пользователя.
4. Затем сессия продолжается уже с использованием симметричного шифрования.
Хэширование
В отличие от других схем шифрования, хэширование в SSH используется не для дешифровки данных, а для создания уникальных шифрованных ключей для подтверждения сообщений об аутентификации. Эти ключи (хэши) используются в механизме симметричного шифрования SSH-сессии.
Подключение по паролю на виртуальном хостинге
На виртуальном хостинге SSH используется реже, чем на VPS/VDS и выделенных серверах. Его применяют лишь некоторые провайдеры, например, Beget.
SSH-доступ в панели управления Beget
Чтобы работать с сервером при помощи командной строки Linux, пользователю нужно:
1. Включить опцию “SSH-доступ”.
2. Подключиться к своему серверу при помощи SSH-клиента, используя логин и пароль от личного кабинета.
На платформе Linux
SSH-Linux-клиент предустановлен на всех версиях операционной системы Linux. Также SSH-доступ заранее настроен на серверах под управлением Linux.
1. Пользователю Linux для применения SSH достаточно запустить терминал (так называется командная строка в Linux) и набрать команду:
2. Система предложит вам ввести пароль.
3. Произойдет соединение с удаленным компьютером-сервером, и вы сможете начать полноценную работу на нем.
В случае с ассиметричным методом шифрования, вводить пароль не требуется, аутентификация происходит посредством сопоставления уникальных ключей между клиентом и сервером.
На платформе Windows
На платформе Windows для использования протокола SSH разработано специальное программное обеспечение: SSH-клиенты.
Наиболее популярным является SSH Windows-клиент PuTTY, поддерживающий все современные стандарты шифрования для SSH.
1. Скачайте PuTTY с официального сайта на локальный компьютер, чтобы начать работу.
2. При запуске SSH-клиент PuTTY предложит ввести IP-адрес хоста для подключения. Например, 95.179.134.210.
3. Затем откроется окно терминала и приглашение для ввода имени пользователя и пароля, после чего вы соединитесь с удаленным сервером.
Подключение по ключам
Для Linux
Чтобы подключиться по SSH без пароля, необходимо создать пару приватный+публичный ключ и сохранить публичный ключ на хостинге.
1. В терминале выполните команду:
2. Программа спросит, куда нужно сохранить ключи.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
5. Приватный и публичный ключи созданы.
6. Чтобы загрузить публичный ключ на сервер в файл
/.ssh/authorized_keys, запустите на локальном компьютере команду:
Для Windows
SSH-Windows-клиент PuTTY умеет генерировать приватный и публичный ключи пользователя для их применения при подключении по SSH.
Для этого используется поставляемая в комплекте утилита puttygen.exe.
1. При запуске утилиты нажмите кнопку “Генерировать”.
2. Программа предложит вам подвигать мышью для создания случайной последовательности данных, затем генерируются ключи.
3. После создания ключи нужно сохранить на компьютер в виде текстовых файлов (Пункт “Сохранить сгенерированные ключи”, кнопки “Открытый ключ” и “Личный ключ” соответственно для публичного и приватного ключей).
7. После этого в самой программе PuTTY укажите имя пользователя для автовхода:
8. Подключите в файл SSH приватный ключ, предварительно сохраненный в утилите puttygen.exe:
9. После выполнения этих операций соединение с удаленным сервером по протоколу SSH произойдет без ввода пароля за счет пары публичный + приватный ключ:
Мы рекомендуем использовать пару приватный+публичный ключ как самый безопасный способ соединения по SSH.
Настройка SSH на сервере
На Linux-сервере за работу протокола SSH отвечает программа sshd из набора программного обеспечения openssh.
Конфигурационные файлы находятся в каталоге /etc/ssh.
Для управления настройками сервера SSH нужны привилегии суперпользователя root.
Сами настройки sshd не требуют изменений.
Мы советуем запретить подключение по SSH для пользователя root для повышения общей безопасности системы.
Применение протокола SSH для копирования файлов
Для Linux-платформы при копировании файлов через SSH используется утилита SCP (secure copy).
Например, чтобы скопировать файл “data” с локальной машины на удаленный сервер, применяется команда вида “scp data admin@95.179.134.210:data”.
Утилита scp запросит пароль пользователя и затем выполнит копирование:
Для Windows платформы используется протокол SFTP (Secure FTP), разработанный как замена обычного FTP.
Поддержка SFTP есть в популярном клиенте Filezilla. Для соединения необходимо знать имя пользователя и его пароль на удаленном сервере.
1. Чтобы указать использование протокола SFTP, в Filezilla перед адресом удаленного сервера в соответствующем поле добавьте префикс “sftp://”:
2. После установки соединения по протоколу SFTP работа с файлами и каталогами на удаленном сервере в Filezilla происходит точно так же, как при использовании обычного FTP.
Безопасность
Для повышения безопасности администратору сервера следует воспользоваться некоторым советами:
Провайдеры с виртуальным выделенным сервером (VPS)
Провайдеры предлагающие Linux-хостинг
Провайдеры предлагающие Windows-хостинг
От панели управления зависит ваше удобство в настройке хостинге\сайта.
Большинство качественных хостингов из нашего ТОПа используют удобные панели управления, поэтому рекомендуем больше внимания уделить другим параметрам при выборе.
Настоятельно рекомендуем не покупать слишком дешевый хостинг! Как правило с ним очень много проблем: сервер иногда не работает, оборудование старое, поддержка долго отвечает или не может решить проблему, сайт хостера глючит, ошибки в регистрации, оплате и т.д.
Также мы собрали тарифы от тысяч хостеров, чтобы вы могли выбрать хостинг по конкретной цене.
На языке программирования PHP и базах данных MySQL сейчас работает большинство сайтов. Они же поддерживаются практически всеми современными хостингами.