За что админы любят SSH
Представим ситуацию: ваш сайт перестал работать, панель управления хостингом не открывается, а вам нужно всё починить. Или такое: вы работаете в Брянске, ваш заказчик — в Сыктывкаре, и у него сломался интернет-магазин на собственном сервере.
Тут два варианта: можно физически приехать в нужный город, подключить клавиатуру к серверу и исправить всё на месте. А можно подключиться к серверу удалённо по SSH и поисправлять все ошибки, попивая сок у себя в квартале (в Брянске).
SSH — это защищённый протокол, по которому компьютеры могут отправлять друг другу команды и данные. В нашем случае с помощью SSH можно удалённо управлять каким-нибудь компьютером: давать ему команды, исполнять на нём программы и делать что угодно ещё, что позволит нам командная строка. Если удалось связаться с компьютером по SSH, то это как будто вы подключили к удалённому компьютеру свою клавиатуру.
Командная строка
Если вы подключитесь к другому компьютеру по SSH, вы не увидите там рабочий стол и окна программ. Вы увидите чёрный экран и строки текста. Это нормально. Это называется командной строкой. Сейчас вы поймёте.
Когда вы работаете за компьютером, вы обычно видите окна, кнопки, страницы и всё подобное. Это называется графическим интерфейсом.
Графический интерфейс — это не сами программы. Это лишь способ представления программы. Сама программа — это то, что исполняется внутри компьютера: то, что считает, копирует, обрабатывает и так далее. Есть огромное количество программ без графического интерфейса: например, веб-сервер Apache — это программа. Сервер работает на вашем компьютере, занимает память, выдаёт страницы куда нужно, ведёт свою серверную работу, но у него нет графического интерфейса — нет никакого окошка, на которое вы можете сказать «Это сервер».
Или, например, ваш браузер. Если у вас Chrome, то вы видите окно с веб-страницей. А есть версия Headless Chrome, которая может выплёвывать любые страницы в виде картинок прямо на ваш жёсткий диск. У этого «Хрома» нет графического интерфейса со страницей (но есть небольшой интерфейс для настройки).
С нашей человеческой точки зрения интерфейс — это и есть программа. А с точки зрения компьютера интерфейс — это что-то побочное. И опытные программисты довольно часто используют в работе программы, у которых нет графического интерфейса, только командная строка.
Командная строка — это текстовый интерфейс программы. Вы вводите в эту строку команду, программа может в ответ что-то вас спросить текстом, вы ей текстом ответите, и программа сделает свою работу. Мы уже сталкивались с командной строкой, когда собирали своё приложение в электроне или объясняли, как устроен интернет:
Бывают и другие интерфейсы программ. Например, может быть голосовой интерфейс: компьютер вас слушает, интерпретирует команды, задаёт вам вопросы голосом.
Может быть интерфейс в виде чата. Вместо того чтобы давать текстовые команды в командной строке, вы пишете команды чат-боту.
Может быть даже физический интерфейс: когда вы играете в приставку, вы даёте команду с помощью джойстика или каких-нибудь палок с датчиками. Когда в вас попадают враги, джойстики могут вибрировать — это приставка вам пытается что-то сказать. Так что графический интерфейс — это лишь одна из разновидностей.
SSH-соединение
Основной принцип работы такой: SSH-клиент на компьютере соединяется с SSH-сервером, они убеждаются, что каждый именно тот, за кого себя выдаёт, договариваются о шифровании и после этого устанавливают защищённый туннель для передачи команд. Важно понимать, что сервер — это просто такое название для удалённого компьютера. Сервером может быть и домашний ноутбук, и плата на Raspberry Pi.
Запуск SSH-клиента
Если у вас один из вариантов линукса, BSD, UNIX или Мак — поздравляем, SSH-клиент у вас уже есть. Для его запуска достаточно набрать в командной строке что-то подобное:
Здесь login — это имя пользователя, под которым вы хотите зайти на сервер, а 11.22.33.44 — IP-адрес этого сервера. Чаще всего используется 22 порт, но иногда эта настройка может меняться.
Порт — это что-то вроде номера маршрутки, которая идёт по городу. Все привыкли, что если нужно «доехать» до SSH, то садятся на маршрутку номер 22. Но иногда начальник городского транспорта (администратор) может поменять номер, тогда вместо 22-й маршрутки нужно будет садиться, например, на 320-ю.
У Виндоус нет встроенного SSH-клиента, поэтому нужно скачать его отдельно. Чаще всего выбирают PyTTY — SSH-клиент с графической оболочкой, в которой можно настраивать параметры соединения:
Обмен ключами шифрования
Когда мы запускаем 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. Вы подключаетесь к ней и заказываете кофе. К моменту, как вы доходите до кофепойнта, ваш кофе готов. Но кто подставит кружку?
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.