diff --git a/builder/assets/noetic-rosdep-clover.yaml b/builder/assets/noetic-rosdep-clover.yaml
index 0fd3fe922..626a68398 100644
--- a/builder/assets/noetic-rosdep-clover.yaml
+++ b/builder/assets/noetic-rosdep-clover.yaml
@@ -986,6 +986,7 @@ log4cxx:
bookworm: [liblog4cxx-dev]
geographiclib:
debian:
+ buster: [libgeographic-dev]
bookworm: [libgeographiclib-dev]
python3-catkin-pkg-modules:
debian:
diff --git a/builder/image-ros.sh b/builder/image-ros.sh
index 37e6f5f86..cbe394d67 100755
--- a/builder/image-ros.sh
+++ b/builder/image-ros.sh
@@ -78,7 +78,7 @@ echo_stamp "Init rosdep"
my_travis_retry rosdep init
echo_stamp "Update rosdep"
-echo "yaml file:///etc/ros/rosdep/noetic-rosdep-clover.yaml" >> /etc/ros/rosdep/sources.list.d/20-default.list
+echo "yaml file:///etc/ros/rosdep/${ROS_DISTRO}-rosdep-clover.yaml" >> /etc/ros/rosdep/sources.list.d/10-clover.list
my_travis_retry rosdep update
echo_stamp "Populate rosdep for ROS user"
diff --git a/clover/launch/aruco.launch b/clover/launch/aruco.launch
index 0a540645d..d0bd86d9c 100644
--- a/clover/launch/aruco.launch
+++ b/clover/launch/aruco.launch
@@ -16,6 +16,7 @@
+
diff --git a/docs/assets/ssh-keys-known_hosts-fingerprint.png b/docs/assets/ssh-keys-known_hosts-fingerprint.png
new file mode 100644
index 000000000..3485d40aa
Binary files /dev/null and b/docs/assets/ssh-keys-known_hosts-fingerprint.png differ
diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md
index d0fc7ce7e..ace075994 100644
--- a/docs/en/SUMMARY.md
+++ b/docs/en/SUMMARY.md
@@ -57,6 +57,7 @@
* [COEX Pix](coex_pix.md)
* [COEX PDB](coex_pdb.md)
* [COEX GPS](coex_gps.md)
+ * [Using SSH keys](ssh_keys.md)
* [Guide on autonomous flight](auto_setup.md)
* [Hostname](hostname.md)
* [PX4 Simulation](sitl.md)
diff --git a/docs/en/cli.md b/docs/en/cli.md
index 3db1fc1e7..c2d44984d 100644
--- a/docs/en/cli.md
+++ b/docs/en/cli.md
@@ -30,6 +30,16 @@ Print path to the current directory:
pwd
```
+Go to the user's home directory:
+
+```bash
+# all three commands are equivalent, where the tilde character (~) is an abbreviated
+# path entry to the home directory, and the $HOME variable stores this path
+cd
+cd ~
+cd $HOME
+```
+
Print contents of the `file.py` file:
```bash
diff --git a/docs/en/ssh.md b/docs/en/ssh.md
index c4104113c..96f64e129 100644
--- a/docs/en/ssh.md
+++ b/docs/en/ssh.md
@@ -13,9 +13,9 @@ ssh pi@192.168.11.1
Password: `raspberry`.
-For SSH access from Windows, you may use [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html).
+For SSH access from Windows, you may use [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html). You can also gain SSH access from your smartphone using the [Termius](https://www.termius.com) app.
-You can also gain SSH access from your smart-phone using the [Termius](https://www.termius.com) app.
+> **Hint** To avoid entering the password each time you connect via SSH, see [the article on using SSH keys](ssh_keys.md).
Read more: https://www.raspberrypi.org/documentation/remote-access/ssh/README.md
diff --git a/docs/en/ssh_keys.md b/docs/en/ssh_keys.md
new file mode 100644
index 000000000..9d42c1e57
--- /dev/null
+++ b/docs/en/ssh_keys.md
@@ -0,0 +1,180 @@
+# Connecting to Raspberry Pi using SSH keys
+
+*This instruction will allow you to quickly connect to the Raspberry Pi. In just one second. Without entering a password.*
+
+Basic information on working with SSH can be found in the section [SSH access to Raspberry Pi](ssh.md). In this section you will find advanced information on using SSH, as well as a number of recommendations on using SSH when working with Clover.
+
+## General information
+
+SSH (*secure shell*) is a network protocol that allows you to remotely control the operating system on the computer you are connected to. It is similar to a protocol such as *telnet*, but allows you to encrypt network traffic during interaction. Thus, the transfer of passwords and other secret information is hidden. The Raspberry Pi operating system supports SSH communication, like many other common Linux-based systems.
+
+SSH allows you not only to organize work in the command shell, but also to transfer files, as well as tunnel transmitted data from other protocols, such as information from a video camera or telemetry. In addition, SSH supports several authentication modes (that is, verification of the connecting user), with its help it is possible to connect to the Clover not only using a password, but also password-free access (authentication by a key pair, i.e. SSH keys).
+
+## Password authentication
+
+Authentication [by password](ssh.md) on the image of RPi for Clover is enabled by default and the password can be used to enter into the command shell of the minicomputer. On computers with Linux operating systems (and primarily on servers connected to the Internet), the ability to login with a password is usually disabled, since there is a more secure authentication method.
+
+> **Hint** It is not recommended to disable logging into Clover by password, since you can completely lose access to the command shell over the network.
+
+When connecting to RPi for the first time, you will see the notification with a suggestion to save a unique *fingerprint*. The stored information is accumulated on computers from which SSH login to RPi is performed, and is checked for sudden substitution.
+
+On Linux and Unix (Mac OS) the first SSH-connection to the RPi looks like this:
+
+```bash
+ssh pi@192.168.11.1
+# The authenticity of host '192.168.11.1 (192.168.11.1)' can't be established.
+# ED25519 key fingerprint is SHA256:4w/7MqTgrtsqPwKnVAMISpouaOJNqzUew2NkJjldMWI.
+# This key is not known by any other names
+# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
+# Warning: Permanently added '192.168.11.1' (ED25519) to the list of known hosts.
+# pi@192.168.11.1's password: *********
+# Linux clover-3270 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l
+
+whoami
+# pi
+
+exit
+```
+
+In graphical programs in Windows, you will periodically see window with similar warnings.
+
+
+
+> **Hint** Windows 10 has a built-in SSH client that can be run from the command line, see the Microsoft usage guide [at this link](https://learn.microsoft.com/ru-ru/windows-server/administration/openssh/openssh_install_firstuse).
+
+## Authentication using SSH keys
+
+SSH keys are a convenient, fast alternative way to connect to the Raspberry Pi, which does not require entering a password. In particular, when operating with Clover, this method is convenient because it saves time, and therefore battery power, and the time limit allocated for events in flight zones. In addition, using SSH keys opens up opportunities for convenient use of other programs that you would hardly use if you needed to type a password every time.
+
+The SSH key is divided into two parts: the pair consists of a so-called *private* and *public* key. The key is generated once. One part of the key (open) is transferred once to the remote computer to which the connection will be made, the second part of the key (private) is stored on the computer that will connect, the private part of the key is not transferred anywhere.
+
+> **Hint** The public key is copied once to the Raspberry Pi, and the private key is stored in the laptop as a file.
+
+### Preparation
+
+In order for a key pair to appear, it must be generated. In Linux and Unix (Mac OS), there is a program `ssh-keygen` with which we will get the key pair we need (**attention!** commands are executed not in Raspberry Pi, and not in the virtual machine of the Gazebo simulator, but in the command shell of the laptop from which you will connect to the Clover):
+
+Before using the keys, you need to perform a number of actions to configure access rights *on the laptop*:
+
+```bash
+# one-time setting of access rights to user directories
+chmod o-rwx $HOME
+mkdir ~/.ssh
+chmod g-rwx,o-rwx ~/.ssh
+touch ~/.ssh/config ~/.ssh/known_hosts
+chmod 600 ~/.ssh/config ~/.ssh/known_hosts
+```
+
+> **Hint** The `.ssh` directory in the user's home folder is the standard storage location for both key pairs and SSH connection settings, so we prohibit access to it by the Others group (*outsiders*). Modern Linux distributions check access rights to files in the `.ssh` directory and may refuse authentication by key pairs.
+
+### Generating an SSH key pair
+
+Generating a pair of SSH keys in the `~/.ssh` directory on the laptop:
+
+```bash
+ssh-keygen -f ~/.ssh/id_clover -C "SSH key for Clover" -N ""
+# Your identification has been saved in /home/galina/.ssh/id_clover
+# Your public key has been saved in /home/galina/.ssh/id_clover.pub
+
+chmod 400 ~/.ssh/id_clover*
+```
+
+### Copying SSH key to Raspberry Pi
+
+After that [connect to Raspberry Pi via WiFi](wi fi.md) and continue to enter commands *on the laptop* to copy the key to the minicomputer:
+
+```bash
+ssh-copy-id -i ~/.ssh/id_clover.pub pi@192.168.11.1
+# pi@192.168.11.1's password: *********
+```
+
+As a result, the so-called *public* part of the key will be copied from the laptop to the RPi microcomputer, and the *private* part will remain on the laptop. To verify the connection without entering a password, use the command indicating the path where the SSH key is located:
+
+```bash
+ssh -i ~/.ssh/id_clover pi@192.168.11.1
+```
+
+If the terminal does not require you to enter a password to connect to the RPi, then you did everything correctly and the SSH key pair works. Now you can type the exit command from the SSH terminal to continue configuring the laptop:
+
+```bash
+pi@clover-3270:~ $ exit
+# logout
+# Connection to 192.168.11.1 closed.
+
+galina@Thinkpad-X1:~/.ssh$
+```
+
+## Configuring SSH connection to Clover
+
+Now let's set up the SSH terminal in such a way that you don't have to enter the path to the private key every time. This is done by editing the `~/.ssh/config` file *on a laptop*. Open the file in a text editor and add the following lines to the file (if there is already some information there, then put them at the end of the file):
+
+```txt
+Host 192.168.11.1
+ User pi
+ IdentityFile ~/.ssh/id_clover
+ PreferredAuthentications publickey,password
+ PubkeyAuthentication yes
+ PasswordAuthentication yes
+ ConnectTimeout 1
+ TCPKeepAlive yes
+ ServerAliveInterval 2
+ ServerAliveCountMax 3
+ StrictHostKeyChecking no
+```
+
+This setting:
+
+* affects the operation of the SSH terminal when connected to a computer with the IP address `192.168.11.1`;
+* if the user name is not specified, the name `pi` will be used automatically;
+* the private key `~/.ssh/id_clover` will be used automatically;
+* if the key does not fit for some reason (it was replaced on one laptop, but forgot to replace it on another), then the SSH terminal will switch to password authentication (settings `PreferredAuthentications`, `PubkeyAuthentication`, `PasswordAuthentication`);
+* if communication with RPi cannot be established (WiFi is not yet connected), then the SSH connection will not hang, but will be completed quickly (setting `ConnectTimeout`);
+* if the connection with RPi is suddenly severed, the SSH connection will not hang, but will be completed quickly (settings `TCPKeepAlive`, `ServerAliveInterval`, `ServerAliveCountMax`);
+* the unique SSH *fingerprints* of the RPi microcomputers mentioned above will no longer be checked (the settings `StrictHostKeyChecking`).
+
+This will solve a lot of inconveniences associated with using SSH connections.
+
+> **Hint** If you have several Raspberry Pi-based drones in your laboratory, and several laptops, then you can **generate SSH keys once**, copy them to all drones and spread them across all laptops, then you can quickly access any of the drones from any laptop.
+
+Now, to connect to RPi from a Linux terminal, you just need to type `ssh 1[TAB][TAB][ENTER]` and the ip address `192.168.11.1` will be automatically updated on the command line, because the command shell uses addresses from the file `~/.ssh/config` and is able to "guess" your intentions to connect to the Clover. By pressing enter, you will instantly find yourself in the RPi terminal.
+
+> **Hint** Graphical programs for Windows that support working with SSH keys, which you can use: [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) and [MobaXterm](https://mobaxterm.mobatek.net/).
+
+## Copying files using SSH
+
+To copy a file `circle_flight.py` from the laptop to the RPi to the user's home folder `pi`, you can also use SSH. To do this, type the command in the command shell:
+
+```bash
+# first we specify 'what' we copy, and then 'where'
+scp circle_flight.py 192.168.11.1
+```
+
+To copy `output.avi` file from the `examples` RPi' folder to the laptop, use a similar command:
+
+```bash
+# after the ':' character (colon), you can specify the path on the remote computer
+# the path specified as './' means the current folder where the file will be copied
+scp 192.168.11.1:examples/output.avi ./
+```
+
+## Remote command launch via SSH
+
+To run a command at laptop on the RPi (that is, remotely), you can also use SSH.
+
+Raspberry shutdown command:
+
+```bash
+ssh 192.168.11.1 'sudo shutdown now'
+```
+
+Example of a Python script' startup command:
+
+```bash
+ssh -t 192.168.11.1 'ROS_HOSTNAME=`hostname`.local && . /opt/ros/noetic/setup.bash && . /home/pi/catkin_ws/devel/setup.bash && python3 examples/get_telemetry.py'
+```
+
+In order to remotely start video recording, you can run the command:
+
+```bash
+ssh -t 192.168.11.1 'ROS_HOSTNAME=`hostname`.local && . /opt/ros/noetic/setup.bash && . /home/pi/catkin_ws/devel/setup.bash && rosrun image_view video_recorder image:=/main_camera/image_raw'
+```
diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md
index 580e31a2a..fd8568b81 100644
--- a/docs/ru/SUMMARY.md
+++ b/docs/ru/SUMMARY.md
@@ -58,6 +58,7 @@
* [COEX Pix](coex_pix.md)
* [COEX PDB](coex_pdb.md)
* [COEX GPS](coex_gps.md)
+ * [Использование SSH-ключей](ssh_keys.md)
* [Радио-телеметрия](radio_telemetry.md)
* [Камера Hawk Eye](hawk_eye.md)
* [Гид по автономному полету](auto_setup.md)
diff --git a/docs/ru/cli.md b/docs/ru/cli.md
index 35ed33df4..781921ec2 100644
--- a/docs/ru/cli.md
+++ b/docs/ru/cli.md
@@ -30,6 +30,16 @@ cd ..
pwd
```
+Перейти в домашнюю директорию пользователя:
+
+```bash
+# все три команды равнозначны, где символ тильда (~) это сокращённая запись пути
+# к домашней директории, а переменная $HOME хранит этот путь
+cd
+cd ~
+cd $HOME
+```
+
Вывести содержимое файла `file.py`:
```bash
diff --git a/docs/ru/ssh.md b/docs/ru/ssh.md
index 14e18d58b..5f47eefc7 100644
--- a/docs/ru/ssh.md
+++ b/docs/ru/ssh.md
@@ -10,10 +10,12 @@
ssh pi@192.168.11.1
```
-Пароль: ``raspberry``.
+Пароль: `raspberry`.
Для доступа по SSH из Windows можно использовать [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) или веб-доступ (см. далее). Также можно получить доступ по SSH со смартфона с помощью приложения [Termius](https://www.termius.com).
+> **Hint** Для того, чтобы не вводить пароль при каждом подключении по SSH, см. [статью об использовании SSH-ключей](ssh_keys.md).
+
Подробнее: https://www.raspberrypi.org/documentation/remote-access/ssh/README.md.
## Веб-доступ
diff --git a/docs/ru/ssh_keys.md b/docs/ru/ssh_keys.md
new file mode 100644
index 000000000..1baaa9b57
--- /dev/null
+++ b/docs/ru/ssh_keys.md
@@ -0,0 +1,184 @@
+# Подключение к Raspberry Pi с использованием SSH-ключей
+
+*Эта инструкция позволит вам быстро подключаться к Raspberry Pi. Всего за одну секунду. Без ввода пароля.*
+
+Базовые сведения по работе с SSH вы можете найти в разделе [Доступ по SSH к Raspberry Pi](ssh.md). А в этом разделе вы найдёте расширенную информацию по использованию SSH, а также ряд рекомендаций по использованию SSH при работе с Клевером.
+
+## Общая информация
+
+SSH (англ. *secure shell* — "безопасная оболочка") - сетевой протокол, позволяющий удалённо управлять операционной системой на компьютере, к которому вы подключились. Аналогичен такому протоколу, как *telnet*, но позволяет выполнять шифрование сетевого трафика по время взаимодействия. Таким образом передача паролей и другой секретной информации оказываются скрыты. Операционная система Raspberry Pi поддерживает взаимодействие по SSH, как и многие другие распространённые системы на базе Linux.
+
+SSH позволяет не только организовывать работу в командной оболочке, но и передавать файлы, а также туннелировать передаваемые данные других протоколов, например информацию с видеокамеры или телеметрию. Кроме того, SSH поддерживает несколько режимов аутентификации (то есть проверки подключающегося пользователя), с его помощью возможно подключение к Клеверу не только с использованием пароля, но и беспарольный доступ (аутентификация по ключевой паре, т.е. SSH-ключи).
+
+## Аутентификация по паролю
+
+Аутентификация [по паролю](ssh.md) на образе RPi для Клевера включена и пароль может быть использован для входа в командную оболочку мини-компьютера. На ЭВМ с операционными системами Linux (и в первую очередь на серверах, подключенных к интернету) возможность входа по паролю обычно отключают, поскольку есть более безопасный способ аутентификации.
+
+> **Hint** Вход в Клевер по паролю отключать не рекомендуется, поскольку можно совсем утратить доступ к командной оболочке по сети.
+
+При первом подключении к RPi пользователю показывается уведомление с предложением сохранить уникальный отпечаток *fingerprint*. Сохранённая информация накапливается на компьютерах с которых выполняется вход по SSH на RPi, и проверяется на внезапную подмену.
+
+В ОС Linux и Unix (Mac OS) в текстовом SSH-клиенте первое подключение к RPi выглядит таким образом:
+
+```bash
+ssh pi@192.168.11.1
+# The authenticity of host '192.168.11.1 (192.168.11.1)' can't be established.
+# ED25519 key fingerprint is SHA256:4w/7MqTgrtsqPwKnVAMISpouaOJNqzUew2NkJjldMWI.
+# This key is not known by any other names
+# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
+# Warning: Permanently added '192.168.11.1' (ED25519) to the list of known hosts.
+# pi@192.168.11.1's password: *********
+# Linux clover-3270 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l
+
+whoami
+# pi
+
+exit
+```
+
+В графических программах в Windows у вас будут периодически возникать окошки с похожими предупреждениями.
+
+
+
+> **Hint** В Windows 10 появился встроенный SSH-клиент, который можно запускать из командной строки, см. руководство по использованию от Microsoft [по этой ссылке](https://learn.microsoft.com/ru-ru/windows-server/administration/openssh/openssh_install_firstuse).
+
+## Аутентификация с использованием SSH-ключей
+
+SSH-ключи - это удобный, быстрый альтернативный способ подключения к Raspberry Pi, для которого не требуется ввод пароля. В частности, при эксплуатации Клевера такой способ удобен потому, что экономит время, а значит и заряд аккумулятора, и лимит времени отведённого на мероприятия в полётных зонах. Кроме того, использование SSH-ключей открывает возможности по удобному использованию других программ, которыми бы вы вряд-ли воспользовались бы при необходимости всякий раз набирать пароль.
+
+SSH-ключ делится на две части: пара состоит из т.н. *закрытого* и *открытого* ключа. Ключ однократно генерируется. Одна часть ключа (открытая) однократно передаётся на удалённый компьютер к которому будет выполняться подключение, вторая часть ключа (закрытая) хранится на компьютере, который будет подключаться, закрытая часть ключа никуда не передаётся.
+
+> **Hint** Открытый ключ однократно копируется на Raspberry Pi, а закрытый ключ сохраняется в ноутбуке в виде файла.
+
+### Подготовка
+
+Для того, чтобы пара ключей появилась, её необходимо сгенерировать. В ОС Linux и Unix (Mac OS) есть программа `ssh-keygen` с помощью которой мы и получим нужную нам пару ключей (**внимание!** команды выполняются не в Raspberry Pi, и не в виртуальной машине симулятора Gazebo, а в командной оболочке ноутбука с которого вы будете подключаться к Клеверу):
+
+Прежде чем пользоваться ключами, необходимо выполнить ряд действий для настройки прав доступа *на ноутбуке*:
+
+```bash
+# однократная настойка прав доступа к пользовательским директориям
+chmod o-rwx $HOME
+mkdir ~/.ssh
+chmod g-rwx,o-rwx ~/.ssh
+touch ~/.ssh/config ~/.ssh/known_hosts
+chmod 600 ~/.ssh/config ~/.ssh/known_hosts
+```
+
+> **Hint** Директория `.ssh` в домашней папке пользователя - это стандартное место хранения и ключевых пар, и настроек подключения с использованием SSH, поэтому доступ к ней запрещаем группе Others (*посторонние*). Современные дистрибутивы Linux проверяют права доступа к файлам в директории `.ssh` и могут отказать в аутентификации по ключевым парам.
+
+### Генерация пары SSH-ключей
+
+Генерируем пару SSH-ключей в директории `~/.ssh` на ноутбуке:
+
+
+
+```bash
+ssh-keygen -f ~/.ssh/id_clover -C "SSH key for Clover" -N ""
+# Your identification has been saved in /home/galina/.ssh/id_clover
+# Your public key has been saved in /home/galina/.ssh/id_clover.pub
+
+chmod 400 ~/.ssh/id_clover*
+```
+
+### Копирование SSH-ключа на Raspberry Pi
+
+После чего [подключаемся к Raspberry Pi по Wi-Fi](wifi.md) и продолжаем вводить команды *на ноутбуке* для копирования ключа на мини-компьютер:
+
+```bash
+ssh-copy-id -i ~/.ssh/id_clover.pub pi@192.168.11.1
+# pi@192.168.11.1's password: *********
+```
+
+В результате с ноутбука на микрокомпьютер RPi будет скопирована т.н. *открытая* часть ключа, а *закрытая* останется на ноутбуке. Для проверки подключения без ввода пароля используем команду с указанием пути где находится SSH-ключ:
+
+```bash
+ssh -i ~/.ssh/id_clover pi@192.168.11.1
+```
+
+Если терминал не потребует ввода пароля для подключения к RPi, то вы всё сделали правильно и пара SSH-ключей работает. Теперь можно набрать команду выхода из SSH-терминала, чтобы продолжить настройку ноутбука:
+
+```bash
+pi@clover-3270:~ $ exit
+# logout
+# Connection to 192.168.11.1 closed.
+
+galina@Thinkpad-X1:~/.ssh$
+```
+
+## Настройка SSH-подключения к Клеверу
+
+Теперь давайте настроим SSH-терминал таким образом, чтобы не приходилось всякий раз вписывать путь к закрытому ключу. Это делается с помощью редактирования файла `~/.ssh/config` *на ноутбуке*. Откройте файл в текстовом редакторе и добавьте в файл следующие строки (если там уже есть какая-то информация, то поместите их в конец файла):
+
+```txt
+Host 192.168.11.1
+ User pi
+ IdentityFile ~/.ssh/id_clover
+ PreferredAuthentications publickey,password
+ PubkeyAuthentication yes
+ PasswordAuthentication yes
+ ConnectTimeout 1
+ TCPKeepAlive yes
+ ServerAliveInterval 2
+ ServerAliveCountMax 3
+ StrictHostKeyChecking no
+```
+
+Эта настройка:
+
+* влияет на работу SSH-терминала при подключении к компьютеру с ip-адресом `192.168.11.1`;
+* если имя пользователя не указано, то автоматически будет использоваться имя `pi`;
+* будет автоматически использоваться приватный ключ `~/.ssh/id_clover`;
+* если ключ по каким-то причинам не подойдёт (был заменён на одном ноутбуке, но забыт заменить на другом), то SSH-терминал перейдёт к аутентификации по паролю (настройки `PreferredAuthentications`, `PubkeyAuthentication`, `PasswordAuthentication`);
+* если связь с RPi не может установиться (WiFi ещё не включился), то SSH-подключение не зависнет, а быстро завершится (настройка `ConnectTimeout`);
+* если связь с RPi будет внезапно разорвана, то SSH-подключение не зависнет, а быстро завершится (настройки `TCPKeepAlive`, `ServerAliveInterval`, `ServerAliveCountMax`);
+* уникальные SSH-отпечатки RPi-микрокомпьютеров (*fingerprints*) о которых упоминалось выше, проверяться больше не будут (настройка `StrictHostKeyChecking`).
+
+Таким образом будет решено множество неудобств, связанных с использованием SSH-подключений.
+
+> **Hint** Если у вас в лаборатории несколько дронов на базе Raspberry Pi, и несколько ноутбуков, то можно **однократно** сгенерировать SSH-ключи, скопировать их на все дроны и разложить по всем ноутбукам, тогда с любого ноутбука можно будет быстро зайти на любой из дронов.
+
+Теперь, чтобы подключиться к RPi из терминала Linux вам достаточно набрать `ssh 1[TAB][TAB][ENTER]` и ip-адрес `192.168.11.1` автоматически дополнится в командной строке, т.к. командная оболочка использует адреса из файла `~/.ssh/config` и способна "угадать" ваши намерения для подключения к Клеверу. Нажав ввод вы мгновенно окажетесь в терминале RPi.
+
+> **Hint** Графические программы для Windows, которые поддерживают работу с SSH-ключами, которыми вы можете воспользоваться: [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) и [MobaXterm](https://mobaxterm.mobatek.net/).
+
+## Копирование файлов при помощи SSH
+
+Чтобы скопировать файл `circle_flight.py` с ноутбука на RPi в домашнюю папку пользователя `pi` можно также воспользоваться SSH. Для этого наберите в командной оболочке команду:
+
+```bash
+# сначала указываем 'что' копируем, а потом 'куда'
+scp circle_flight.py 192.168.11.1
+```
+
+Для того, чтобы скопировать файл `output.avi` c RPi из папки `examples` на ноутбук используем похожую команду:
+
+```bash
+# после символа ':' (двоеточие) можно указать путь на удалённом компьютере
+# путь указанный как './' означает текущую папку, куда будет скопирован файл
+scp 192.168.11.1:examples/output.avi ./
+```
+
+## Удалённый запуск команд по SSH
+
+Чтобы запустить команду с ноутбука на RPi (то есть удалённо) можно также воспользоваться SSH.
+
+Команда выключения Raspberry:
+
+```bash
+ssh 192.168.11.1 'sudo shutdown now'
+```
+
+Пример команды запуска Python-скрипта:
+
+
+
+```bash
+ssh -t 192.168.11.1 'ROS_HOSTNAME=`hostname`.local && . /opt/ros/noetic/setup.bash && . /home/pi/catkin_ws/devel/setup.bash && python3 examples/get_telemetry.py'
+```
+
+Для того, чтобы удалённо запустить запись видео можно выполнить команду:
+
+```bash
+ssh -t 192.168.11.1 'ROS_HOSTNAME=`hostname`.local && . /opt/ros/noetic/setup.bash && . /home/pi/catkin_ws/devel/setup.bash && rosrun image_view video_recorder image:=/main_camera/image_raw'
+```
diff --git a/redirects.json b/redirects.json
index a851c75e7..2fa8d8347 100644
--- a/redirects.json
+++ b/redirects.json
@@ -21,6 +21,7 @@
{ "from": "connection.html", "to": "en/connection.html" },
{ "from": "wifi.html", "to": "ru/wifi.html" },
{ "from": "ssh.html", "to": "ru/ssh.html" },
+ { "from": "ssh_keys.html", "to": "ru/ssh_keys.html" },
{ "from": "network.html", "to": "ru/network.html" },
{ "from": "gcs_bridge.html", "to": "ru/gcs_bridge.html" },
{ "from": "rc.html", "to": "ru/rc.html" },