Изменил(а) на 'README.md'

This commit is contained in:
2023-03-24 10:32:38 +00:00
parent 3e70f2bf2b
commit be63d4707d

260
README.md
View File

@@ -1,2 +1,260 @@
# omgauto-public-description # Подключение к SSH
Для работы с серверами используется терминал. Текстовый интерфейс, который он обеспечивает, может быть менее наглядным,
чем графический, однако он обеспечивает гораздо более гибкий доступ к настройкам и менее требователен к ресурсам.
Откройте приложение **Терминал** (Finder - Программы - Утилиты). Должно открыться примерно такое окно:
![Терминал](https://blog.allo.ua/wp-content/uploads/Kak-ispolzovat-terminal-na-Mac-stroka-priglasheniya-vvoda.jpg)
Здесь и далее, все команды в терминале будут обозначены символом `$` в начале строки, например:
```shell
~$ ls
/srv$ pwd
$ echo "Hello, world!"
```
Здесь:
* `~` и `/srv` - текущий каталог (`~` - домашний каталог). Подразумевается, что запускать команду надо из этого
каталога. Если эта часть не указана, то это команду можно выполнять в любом каталоге.
* `$` индикатор начала команды
* `ls` и `pwd` - собственно команды который надо ввести, что эта команда терминалу; при этом в сам терминал его вводить _не нужно_. Для
запуска команды достаточно будет просто нажать `Enter`.
Пример запуска первой команды из примера выше:
![ls](https://www.macworld.com/wp-content/uploads/2023/01/terminal-macos-big-sur-1.jpg?quality=50&strip=all)
Если же каталог в запущенном терминале не совпадает с каталогом, указанном до `$`, то необходимо изменить каталог,
используя команду `cd <целевой каталог>`, например:
```shell
$ cd /srv
```
К сожалению, более постоянные картинки-примеры я привести не смогу ввиду отсутствия устройств от Apple...
## 1 Добавление синонима сервера
Добавьте в файл `hosts` следующую строку:
```
45.9.42.246 omgauto.ssh
```
В Mac OS этот файл располагается в `/private/etc/hosts`, редактировать его необходимо от имени администратора.
[Подробнее об изменении этого файла](https://help.reg.ru/support/dns-servery-i-nastroyka-zony/rabota-s-dns-serverami/fayl-hosts-na-macos).
Таким образом, создаётся синоним для IP адреса сервера (`45.9.42.246`), так что дальнейшие команды будут чуть более понятны.
## 2 Ключ шифрования
Откройте Терминал и введите следующую команду:
```shell
$ ssh-keygen -t ed25519
```
И нажмите `Enter`. Скрипт после этого, скорее всего, попросит ввести дополнительные данные: место сохранения и
_passphrase_. Оставьте их значениями по умолчанию (пусть это и [не рекомендовано](https://serverfault.com/questions/142959/is-it-okay-to-use-a-ssh-key-with-an-empty-passphrase)),
нажав на `Enter` ещё несколько раз. После этого ключ будет создан, а на консоль будет выведено примерно следующее сообщение:
```
Your identification has been saved in /Users/myname/.ssh/id_ed25519.
Your public key has been saved in /Users/myname/.ssh/id_ed25519.pub.
The key fingerprint is:
ae:89:72:0b:85:da:5a:f4:7c:1f:c2:43:fd:c6:44:38 myname@mymac.local
The key's randomart image is:
+--[ RSA 2048]----+
|+.o.             |
|ooE              |
|oo               |
|o.+..            |
|.+.+..  S .      |
|....+  o +       |
|  .o ....        |
|  .  .. .        |
|    ....         |
+-----------------+
```
Эта команда создала [ключи шифрования](https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%BC_%D0%BA%D0%BB%D1%8E%D1%87%D0%BE%D0%BC).
Этот ключ состоит из 2 частей: публичного (`/Users/myname/.ssh/id_ed25519.pub`) и приватного (`/Users/myname/.ssh/id_ed25519`).
Эти ключи будут обеспечивать шифрование всего потока данных между вашим компьютером и сервером; а также позволит
подключиться к серверу без дополнительного ввода пароля.
**Никогда и никому не сообщайте приватный ключ**!!! Он должен хранится только на вашем компьютере. Файл с приватным ключом
начинается с `-----BEGIN RSA PRIVATE KEY-----`.
Передавать можно и нужно только публичный ключ. Что бы увидеть публичный ключ, введите
```shell
$ cat ~/.ssh/id_ed25519.pub
```
После нажатия на `Enter`, в консоль выведется примерно такое содержимое (конкретные символы будут, разумеется, другими):
```
ssh-ed25519 AAA...qUx user@localhost.local
```
Скопируйте эту строку, она понадобится позже.
## 3 Первое подключение к серверу
На сервере создано несколько аккаунтов:
* `root` - это главный администраторский аккаунт сервера. Он имеет максимальные права... И поэтому использовать его как
основной аккаунт крайне не рекомендуется. Его пароль я вышлю отдельно.
* `omgauto` - это дополнительный пользовательский аккаунт, который я создал специально для вас. У него стоит временный
пароль `321321`, который нужно будет изменить при первой возможности (см. ниже).
Я настоятельно рекомендую использовать `root` только в случае крайней необходимости. Из-под `omgauto` тоже можно будет
выполнить команды от имени администратора (`sudo` - Super-User DO), однако это потребует ввода пароля, что бы потенциально
небезопасные команды не запускались "случайно".
Для подключения к серверу, в терминале нужно ввести:
```shell
$ ssh omgauto@omgauto.ssh
```
Здесь:
* `ssh` - команда подключения к серверу по протоколу SSH
* `omgauto` - имя пользователя
* `@` (читается как `at`) - разделитель между именем пользователя и сервером (`user@server` = `user AT server`)
* `omgauto.ssh` - алиас IP сервера; здесь можно использовать просто IP адрес (`omgauto@45.9.42.246`), однако мне кажется
это менее очевидным способом.
После ввода команды, сервер в первый раз запросит пароль. Не пугайтесь, если после нажатия на клавиши на экране ничего не
будет меняться: так и задумано. Просто введите пароль (`321321`) и нажмите `Enter`. Если всё получилось, должно выйти что-то
типа такого:
![ssh](https://i.imgur.com/FBLor5U.png)
_Заметка_: `ssh` работает одинаково на всех ОС, так что тот факт, что я использую Windows, ни на что не влияет в данном примере.
А после установки соединения с сервером различия и вовсе исчезают, так как теперь мы работаем в терминале сервера.
Сразу же после того, как подключение произошло, измените пароль. Для этого используйте команду
```shell
$ passwd
```
Эта команда попросит ввести сначала текущий пароль (`321321`), а затем дважды новый. Если пароль изменился успешно,
появится сообщение `passwd: password updated successfully`.
Как было сказано выше, подключаться к серверу можно и без пароля. Для этого необходимо ввести следующую команду:
```shell
$ nano ~/.ssh/authorized_keys
```
Откроется консольный редактор `nano`. Вставьте в него публичный ключ, который мы создали ранее:
![nano ~/.ssh/authorized_keys](https://i.imgur.com/1DeNpTD.png)
Для сохранения и выхода нажмите сначала `F2` (появится запрос сохранения), затем `Y` (подтверждение сохранения), затем
`Enter` (подтверждение стандартного места сохранения).
Для проверки, что всё сохранилось, можно ввести
```shell
$ cat ~/.ssh/authorized_keys
```
В консоли должен появиться введённый вами ключ.
Теперь, при следующем подключении, сервер не будет запрашивать пароль. Что бы это проверить, отключитесь от сервера,
завершив SSH-сессию:
```shell
$ exit
```
а затем вновь подключитесь, используя
```shell
$ ssh omgauto@omgauto.ssh
```
Если сервер снова запроси пароль, то что-то произошло с сохранением публичного ключа.
Но, скорее всего, в терминале появится вопрос, уточняющий, продолжать ли подключение к неизвестному (для системы) серверу:
![unknown_host](https://i.imgur.com/GxL05Dx.png)
Введите `yes` на запрос и нажмите `Enter`. Публичный ключ сервера теперь будет сохранён в системе, и следующее (третье)
подключение к серверу произойдёт без дополнительных вопросов.
## 4 Работа с сервером
Базовые команды:
* `ls` - Показать содержимое каталога (список названий файлов);
* `ll` - Показать подробное содержимое каталога (это не стандартная команда, а сокращение);
* `cd` - Сменить каталог (перейти в другой);
* `mkdir` - Создать новую папку (каталог);
* `touch` - Создать новый файл;
* `rm` - Удалить файл;
* `cat` - Показать содержимое файла;
* `pwd` - Показать текущий каталог (полный путь к этому каталогу);
* `cp` - Копировать файл/папку;
* `mv` - Переместить файл/папку;
* `grep` - Поиск конкретной фразы в файле;
* `find` - Поиск файлов и папок;
* `vi` и `nano` - Текстовые редакторы;
* `history` - Показать 50 последних использованных команд;
* `clear` - Очистить окно терминала.
Что бы узнать подробнее о команде, используйте руководство (`man` - **man**ual):
```shell
$ man <команда>
```
Так, например
```shell
$ man ls
```
выдаст такое содержимое:
![man ls](https://i.imgur.com/oVjIyVx.png)
Используйте стрелки вверх и вниз для построчной прокрутки содержимого, кнопки `PageUp` и `PageDown` для более быстрой
прокрутки и `q` для выхода из руководства.
## 5 Критические моменты: HTTPS
Для обеспечения работы HTTPS я использую бесплатные сертификаты от [Lets Encrypt](https://letsencrypt.org). Для
автоматизации используется инструмент `certbot`. И на вашем сервере я настроил автоматическое обновление
SSL-сертификата, используя этот инструмент.
Что бы проверить, что это обновление всё ещё запускается на фоне, достаточно запустить команду:
```shell
$ systemctl list-timers
```
и найти элемент с названием `snap.certbot.renew.time`:
![snap.certbot.renew.time](https://i.imgur.com/bQnfmCR.png)
Если в столбце `PASSED` указано значение меньше суток, то всё в порядке.
## 6 О Node и библиотеках
Ещё одна причина, из-за которой работа генератора PDF прерывалась на моём сервере, — это обновление Node.JS. Это
набор утилит, который я использовал для эмуляции Chrome и последующей "печати" PDF оттуда. Это обновление каким-то
образом сделало новую версию Node несовместимым с внутренней версией утилиты `npm`, которая используется для
обновления пользовательских библиотек и запуска скриптов. Когда вы сообщили о проблеме, я быстро её починил, просто
переустановив Node...
Суть в том, что так как на вашем сервере частые обновления не нужны (один из главных принципов системного
администрирования: "Работает - не трогай!"), ломаться оно не будет. Так же, как не ломалось долгое время на хостинге,
пока они не отключили на хостингах критическую библиотеку, которая не нужна для обычных сайтов, но критическая для
Chrome.
Проверить версию этих библиотек можно используя команды:
```shell
$ node -v
$ npm -v
```
![node/npm versions](https://i.imgur.com/yS6AeQj.png)
Таблицу совместимости версий я не найду, потому что её не существует, но обновлять их всегда надо вместе.
## 7 Проверка ошибок работы скриптов
Что бы проверить, что всё работает и ничто нигде не застряло, можно посмотреть несколько место.
Для всех дальнейших проверок, потребуется перейти в папку, где находятся файлы проекта:
```shell
$ cd /srv/ampodbor.ru
/srv/ampodbor.ru$ ll
```
Вторая команда (`ll`) отобразит список файлов, что бы можно было проверить, что всё на месте:
![список файлов](https://i.imgur.com/SelfZvy.png)
### 7.1 Проверка заданий конвертации
```shell
/srv/ampodbor.ru$ ll tasks
```
В этой папке не должно быть файлов, то есть вывод выглядит так:
![пустая папка tasks](https://i.imgur.com/DNLCiDs.png)
Если же отображается файл с названием типа `task-1234.json`, то есть необработанное задание. Это может произойти по 2
причинам:
1. Задание просто не успело обработаться, так как запуск этих заданий происходит каждую минуту. Подождите минуту, и
запустите команду ещё раз. Файл должен удалиться автоматически.
2. Если же файл не удалился, то, скорее всего, его обработка закончилась ошибкой.
### 7.2 Проверка лога конвертации
```shell
/srv/ampodbor.ru$ tail cron.log
```
Если отображается что-то такое:
![Ошибка](https://i.imgur.com/Frwu95G.png)
То что-то сломалось. Зовите меня, будут разбираться :)