SSH: различия между версиями

Материал из Wiren Board
 
(не показаны 23 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: Как зайти на контроллер Wiren Board по SSH }}
{{DISPLAYTITLE: Как подключиться к консоли контроллера Wiren Board по SSH }}


== Введение ==
== Введение ==
{{YouTube
|link=https://youtu.be/VA_XHrY1RVA?feature=shared&t=500
|text= Работа в консоли контроллера Wiren Board 7 — SSH
}}
SSH — это протокол, при помощи которого можно получить доступ к консоли Wiren Board через локальную сеть или Интернет. Смотрите [http://en.wikipedia.org/wiki/Secure_Shell описание в Википедии].  
SSH — это протокол, при помощи которого можно получить доступ к консоли Wiren Board через локальную сеть или Интернет. Смотрите [http://en.wikipedia.org/wiki/Secure_Shell описание в Википедии].  


Кроме SSH, получить доступ к консоли можно через [[Special:MyLanguage/Debug UART|Debug UART]].
Кроме SSH, получить доступ к консоли можно через [[Special:MyLanguage/Debug Console|Debug Console]].


<gallery mode="packed" heights="200px">
<gallery mode="packed" heights="120px">
Image: Putty logged in.png | Консоль контроллера Wiren Board
Image: Putty logged in.png | Консоль контроллера Wiren Board
Image: Putty enter ip.png | Настройка SSH-соединения в программе PuTTY
Image: Putty enter ip.png | Настройка SSH-соединения в программе PuTTY
</gallery>
</gallery>
== Логин и пароль ==
== Логин и пароль ==
Логин и пароль по умолчанию:
{{note|warn|Смените стандартный пароль! Для удалённого доступа к контроллеру используйте [[Wiren Board Cloud]]. Если всё же надо получить прямой доступ по IP-адресу: используйте авторизацию к SSH по ключу, обязательно [[WebUI_Password |защитите веб-интерфейс и MQTT-брокер сложным паролем]], а также проверьте, что нет других проблем безопасности.}}
* Логин: '''root'''
 
* Пароль: '''wirenboard'''
{{Wbincludes:Controller SSH Default Login Password}}
 
После первого логина в консоль контроллера, рекомендуем сменить пароль на более сложный, так его будет сложнее подобрать. Если вы не знаете, какой пароль выбрать, воспользуйтесь [https://bitwarden.com/password-generator/ бесплатным генератором паролей]. Если предпочитаете придумывать пароль самостоятельно, проверьте его сложность [https://bitwarden.com/password-strength/ бесплатным тестером паролей].


Рекомендуем сменить пароль по умолчанию, для этого введите в консоли контроллера команду <code>passwd</code> и дважды введите новый пароль:
Для смены пароля в консоли контроллера ведите команду <code>passwd</code> и дважды введите новый пароль:
<syntaxhighlight lang="console">
<syntaxhighlight lang="console">
# passwd
# passwd
Строка 22: Строка 29:
passwd: password updated successfully
passwd: password updated successfully
</syntaxhighlight>
</syntaxhighlight>
== Подключение к SSH по ключу ==
Если к контроллеру есть доступ из интернета, то пароли рано или поздно могут подобрать. А ещё сам факт перебора паролей приводит к сильной загрузке процессора контроллера, что сказывается на его производительности.
Чтобы этого избежать — рекомендуем использовать ключи доступа, один из которых остаётся у вас на компьютере, а другой отправляется на контроллер.
Кроме этого SSH-ключи можно использовать при подключении к контроллеру через [[Wiren Board Cloud]]. Технически это ничем не отличается от подключения с компьютера с той лишь разницей, что после генерации ключа и его загрузки в контроллер, приватный ключ надо будет загрузить в облако на специальной странице.
=== Генерация ключа ===
Для авторизации по ключу нам понадобятся приватный и публичный ключи. Процесс генерации немного отличается в разных операционных системах. В процессе будет задано несколько вопросов, можно просто нажать на клавиатуре <kbd>Enter</kbd> для использования значений по умолчанию.
Компьютер с Windows:
# Откройте Power Shell.
# Введите команду
#:<syntaxhighlight lang="bash">
ssh-keygen
</syntaxhighlight>
:пара ключей будет сохранена в <code>C:\Users\<ИмяПользователя>/.ssh</code>
Компьютер с Linux:
# Откройте командную строку.
# Введите команду
#:<syntaxhighlight lang="bash">
ssh-keygen
</syntaxhighlight>
:пара ключей будет сохранена в <code>/home/<ИмяПользователя>/.ssh/</code>
В паре два файла:
* id_rsa  — приватный ключ, он остаётся у вас на компьютере;
* id_rsa.pub — публичный ключ, его надо отправить на контроллер.
=== Загрузка ключа на сервер ===
После того, ка мы сгенерировали ключи, загрузим публичный ключ на контроллер. Процедура немного отличается в разных операционных системах.
Ниже мы отправим публичный ключ <code>id_rsa.pub</code> на контроллер с адресом 192.168.42.1 и логином для подключения root. В процессе будет предложено ввести пароль от учётной записи на контроллере.
Компьютер с Windows:
# Откройте Power Shell.
# Введите команду:
#:<syntaxhighlight lang="bash">
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@192.168.42.1 "cat >> .ssh/authorized_keys"
</syntaxhighlight>
Компьютер с Linux:
# Откройте командную строку.
# Введите команду
#:<syntaxhighlight lang="bash">
ssh-copy-id root@192.168.42.1 
</syntaxhighlight>
=== Запрет авторизации по паролю ===
Это полезно сделать, чтобы у злоумышленников не было возможности подбирать пароль. Убедитесь, что у вас есть доступ к консоли контроллера без пароля.
Чтобы отключить проверку пароля при подключении по SSH:
# Подключитесь к контроллеру по SSH.
# Откройте файл конфигурации:
#:<syntaxhighlight lang="bash">
nano /etc/ssh/sshd_config
</syntaxhighlight>
# Измените параметр PasswordAuthentication с yes на no:
#:<syntaxhighlight lang="bash">
PasswordAuthentication no
</syntaxhighlight>
# Измените параметр PubkeyAuthentication с no на yes:
#:<syntaxhighlight lang="bash">
PubkeyAuthentication yes
</syntaxhighlight>
#{{Wbincludes:Save nano}}
Теперь к контроллеру подключиться по SSH можно будет только с компьютера, на котором есть приватный ключ. Процесс подключения ничем не отличается от обычного, кроме того, что пароль больше не будет запрашиваться. Если вам надо иметь доступ к контроллеру с нескольких компьютеров — скопируйте на них приватный ключ, или повторите на них процедуру генерации и добавления новых ключей.
Если вы отключили доступ по паролю и потеряли приватный ключ, включите его снова через [[Debug Console]].


== Программы ==
== Программы ==
Строка 40: Строка 119:
== Основные команды консоли ==
== Основные команды консоли ==


* <code>ls</code> '''(list)''' — выводит список файлов:
* <code>ls</code> — выводит список файлов.
** <code>ls -la</code> — выводит различные документы и показывает права доступа, включая имя создателя и владельца;
* <code>ls -l</code> — выводит список файлов, а также права доступа, владельца и путь к оригиналу, если файл является ссылкой.
** <code>ls -lha</code> — также выводит файлы, но показывает размер файла в байтах.
* <code>pwd</code> — выводит путь к текущему каталогу, в котором мы находимся.
* <code>cd</code> '''(change directory)''' перемещает между каталогами:
* <code>cd</code> — меняет текущий каталог:
** перейти в указанную папку:
** перейти в указанный каталог:
**: <syntaxhighlight lang="bash">
**: <syntaxhighlight lang="bash">
cd /home/photo/2021
cd /путь/к/каталогу
</syntaxhighlight>
</syntaxhighlight>
**перейти на верхний уровень:
**перейти на верхний уровень:
**: <syntaxhighlight lang="bash">
**: <syntaxhighlight lang="bash">
cd ../
cd ..
</syntaxhighlight>  
</syntaxhighlight>  
** открыть домашнюю папку пользователя:
** перейти в домашний каталог пользователя:
**: <syntaxhighlight lang="bash">
**: <syntaxhighlight lang="bash">
cd ~
cd ~
</syntaxhighlight >
</syntaxhighlight >
* <code>echo</code> — выводит строку текста в терминал:
* <code>mv</code> — перемещает файл или каталог, можно использовать и для переименования:
*: <syntaxhighlight lang="bash" >
echo Hello World
</syntaxhighlight >
*: можно использовать для добавления строк в текстовый файл:
*: <syntaxhighlight lang="bash" >
echo Hello World > text_file.txt
</syntaxhighlight >
* <code>df</code> '''(disk free)''' — показывает доступное дисковое пространство в каждом из разделов операционной системы. Например, узнаем занятое пространство в мегабайтах:
*: <syntaxhighlight lang="bash">
*: <syntaxhighlight lang="bash">
df -m
# переместить файл
mv ~/filename.txt /новый_путь/filename.txt
 
# переместить каталог
mv ~/dirname /новый_путь/dirname
 
# переименовать файл
mv ~/filename.txt ~/newfilename.txt
 
</syntaxhighlight>
</syntaxhighlight>
* <code>mv</code> '''(move)''' перемещает файлы и каталоги в другой каталог (также переименовывает файлы и каталоги). Например, переместим файл example.txt в каталог mydir:
* <code>rm</code> — удаляет файлы и каталоги:
*: <syntaxhighlight lang="bash">
*: <syntaxhighlight lang="bash">
mv example.txt mydir/
# удалить файл
rm ~/filename.txt
 
# удалить каталог каталог со всем содержимым
rm -r ~/dirname
</syntaxhighlight>
</syntaxhighlight>
* <code>rm</code> '''(remove)''' — удаляет файлы и каталоги, например:
* <code>cp</code> — копирует файлы и каталоги:
*: <syntaxhighlight lang="bash">
rm home/photo/new
</syntaxhighlight>
* <code>cp</code> '''(copy)''' — копирует файлы и каталоги, например:
*: <syntaxhighlight lang="bash">
*: <syntaxhighlight lang="bash">
cp file.txt file_backup.txt
cp file.txt file_backup.txt
</syntaxhighlight>
</syntaxhighlight>
* <code>cat</code> — считывает данные из файла и выводит их на экран, например:
* <code>cat</code> — выводит содержимое файла на экран:
*: <syntaxhighlight lang="bash">
*: <syntaxhighlight lang="bash">
cat file.txt
cat file.txt
</syntaxhighlight>
</syntaxhighlight>
* <code>mkdir</code> '''(make directory)''' — создаёт один или несколько каталогов с указанным именем. Например, добавим сразу 3 каталога:
* <code>mkdir</code> — создаёт один или несколько каталогов с указанным именем:
*: <syntaxhighlight lang="bash">
*: <syntaxhighlight lang="bash">
mkdir mdir1 mdir2 mdir3
mkdir newdirname
</syntaxhighlight>
</syntaxhighlight>
* <code>chmod</code> — изменяет права доступа к файлам и каталогам. Синтаксис:
* <code>chmod</code> — изменяет права доступа к файлам и каталогам:
*: <syntaxhighlight lang="bash">
*: <syntaxhighlight lang="bash">
chmod опции права /путь/к/файлу
# использование
chmod опции /путь/к/файлу
 
# например, сделать файл исполняемым
chmod +x ~/filename.txt
</syntaxhighlight>
</syntaxhighlight>
* <code>pwd</code> '''(print work directory)''' — выводит путь к текущему каталогу, в котором мы находимся.
* <code>touch</code> — создаёт файлы любого типа:
* <code>touch</code> — создаёт файлы любого типа, например:
*: <syntaxhighlight lang="bash">
*: <syntaxhighlight lang="bash">
touch readme.txt
touch newfilename.txt
</syntaxhighlight>
* <code>find</code> — поиск файлов, например, найдём файл interfaces в каталоге ''/mnt/data/'':
*:<syntaxhighlight lang="console">
# find /mnt/data -name "interfaces"
/mnt/data/etc/network/interfaces
</syntaxhighlight>
* <code>nano</code> — [[NanoEditor | редактор текстовых файлов]].
* <code>df</code> — показывает доступное дисковое пространство:
*:<syntaxhighlight lang="console">
# df -hT
Filesystem    Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      980M  818M  95M  90% /
devtmpfs      devtmpfs  239M    0  239M  0% /dev
tmpfs          tmpfs    248M    0  248M  0% /dev/shm
tmpfs          tmpfs      99M  1.2M  98M  2% /run
tmpfs          tmpfs    5.0M    0  5.0M  0% /run/lock
/dev/mmcblk0p6 ext4      4.7G  1.9G  2.7G  41% /mnt/data
tmpfs          tmpfs      50M    0  50M  0% /run/user/0
 
</syntaxhighlight>
</syntaxhighlight>
* <code>--help</code> — посмотреть справку по команде:
* <code>--help</code> — посмотреть справку по команде:
Строка 101: Строка 202:
cd --help
cd --help
</syntaxhighlight>
</syntaxhighlight>
* <code>locate</code> — производит поиск файла в системе Linux.
 
* <code>nano</code> — [[NanoEditor | редактор текстовых файлов]]:
== Обновление прошивки ==
*: <syntaxhighlight lang="bash">
[[Image: screen-help.png |300px|thumb|right| Приветственный экран команды screen ]]
nano /etc/network/interfaces
При подключении по SSH есть риск, что соединение будет разорвано: закрыли окно подключения, пропала связь и т.п. Поэтому важные команды, например, обновление прошивки, лучше выполнять через утилиту [https://help.ubuntu.ru/wiki/screen screen]. Утилита создаст на контроллере виртуальную сессию командной оболочки, поэтому обрыв связи не повлияет на выполнение запущенных в ней команд.
 
Утилита не входит в стандартный пакет программ, поэтому ее нужно сначала установить:
<syntaxhighlight lang="bash">
apt install screen
</syntaxhighlight>
 
Как работать:
# Запустите сеанс screen командой:
#: <syntaxhighlight lang="bash">
screen
</syntaxhighlight>
</syntaxhighlight>
* <code>ssh</code> '''(security shell)''' осуществляет вход в консоль другой системы LINUX:  
#:После подключения вы увидите приветственный экран программы, нажмите на клавиатуре <kbd>Пробел</kbd> или <kbd>Enter</kbd> — откроется виртуальная консоль, которая внешне ничем не отличается от обычной.
*: <syntaxhighlight lang="bash">
# Дальше вводите нужные вам команды, а при разрыве связи достаточно будет переподключиться к контроллеру и открыть работающий сеанс командой:
ssh пользователь@IP_адрес или пользователь@имя контроллера
#:<syntaxhighlight lang="bash">
screen -r
</syntaxhighlight>
</syntaxhighlight>
* <code>scp</code> '''(ssh copy)''' — копирует файл в другую систему LINUX(на контроллер):  
# Для выхода из виртуальной консоли введите:
*: <syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
scp путь/файл — пользователь@IP_адрес
exit
</syntaxhighlight>
</syntaxhighlight>

Текущая версия на 05:51, 26 июня 2024


Введение

Работа в консоли контроллера Wiren Board 7 — SSH

SSH — это протокол, при помощи которого можно получить доступ к консоли Wiren Board через локальную сеть или Интернет. Смотрите описание в Википедии.

Кроме SSH, получить доступ к консоли можно через Debug Console.

Логин и пароль

Смените стандартный пароль! Для удалённого доступа к контроллеру используйте Wiren Board Cloud. Если всё же надо получить прямой доступ по IP-адресу: используйте авторизацию к SSH по ключу, обязательно защитите веб-интерфейс и MQTT-брокер сложным паролем, а также проверьте, что нет других проблем безопасности.

Учётная запись по умолчанию: логин root, пароль wirenboard.

После первого логина в консоль контроллера, рекомендуем сменить пароль на более сложный, так его будет сложнее подобрать. Если вы не знаете, какой пароль выбрать, воспользуйтесь бесплатным генератором паролей. Если предпочитаете придумывать пароль самостоятельно, проверьте его сложность бесплатным тестером паролей.

Для смены пароля в консоли контроллера ведите команду passwd и дважды введите новый пароль:

# passwd
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

Подключение к SSH по ключу

Если к контроллеру есть доступ из интернета, то пароли рано или поздно могут подобрать. А ещё сам факт перебора паролей приводит к сильной загрузке процессора контроллера, что сказывается на его производительности.

Чтобы этого избежать — рекомендуем использовать ключи доступа, один из которых остаётся у вас на компьютере, а другой отправляется на контроллер.

Кроме этого SSH-ключи можно использовать при подключении к контроллеру через Wiren Board Cloud. Технически это ничем не отличается от подключения с компьютера с той лишь разницей, что после генерации ключа и его загрузки в контроллер, приватный ключ надо будет загрузить в облако на специальной странице.

Генерация ключа

Для авторизации по ключу нам понадобятся приватный и публичный ключи. Процесс генерации немного отличается в разных операционных системах. В процессе будет задано несколько вопросов, можно просто нажать на клавиатуре Enter для использования значений по умолчанию.

Компьютер с Windows:

  1. Откройте Power Shell.
  2. Введите команду
    ssh-keygen
    
пара ключей будет сохранена в C:\Users\<ИмяПользователя>/.ssh

Компьютер с Linux:

  1. Откройте командную строку.
  2. Введите команду
    ssh-keygen
    
пара ключей будет сохранена в /home/<ИмяПользователя>/.ssh/

В паре два файла:

  • id_rsa — приватный ключ, он остаётся у вас на компьютере;
  • id_rsa.pub — публичный ключ, его надо отправить на контроллер.

Загрузка ключа на сервер

После того, ка мы сгенерировали ключи, загрузим публичный ключ на контроллер. Процедура немного отличается в разных операционных системах.

Ниже мы отправим публичный ключ id_rsa.pub на контроллер с адресом 192.168.42.1 и логином для подключения root. В процессе будет предложено ввести пароль от учётной записи на контроллере.

Компьютер с Windows:

  1. Откройте Power Shell.
  2. Введите команду:
    type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@192.168.42.1 "cat >> .ssh/authorized_keys"
    

Компьютер с Linux:

  1. Откройте командную строку.
  2. Введите команду
    ssh-copy-id root@192.168.42.1
    

Запрет авторизации по паролю

Это полезно сделать, чтобы у злоумышленников не было возможности подбирать пароль. Убедитесь, что у вас есть доступ к консоли контроллера без пароля.

Чтобы отключить проверку пароля при подключении по SSH:

  1. Подключитесь к контроллеру по SSH.
  2. Откройте файл конфигурации:
    nano /etc/ssh/sshd_config
    
  3. Измените параметр PasswordAuthentication с yes на no:
    PasswordAuthentication no
    
  4. Измените параметр PubkeyAuthentication с no на yes:
    PubkeyAuthentication yes
    
  1. Нажмите Ctrl+S для сохранения изменений, Ctrl+X — для выхода из редактора.

Теперь к контроллеру подключиться по SSH можно будет только с компьютера, на котором есть приватный ключ. Процесс подключения ничем не отличается от обычного, кроме того, что пароль больше не будет запрашиваться. Если вам надо иметь доступ к контроллеру с нескольких компьютеров — скопируйте на них приватный ключ, или повторите на них процедуру генерации и добавления новых ключей.

Если вы отключили доступ по паролю и потеряли приватный ключ, включите его снова через Debug Console.

Программы

Windows

Для операционной системы Windows, используйте бесплатную программу PuTTY.

Linux

В операционной системе Linux, используйте PuTTY или просто выполните в консоли команду:

ssh root@192.168.42.1

Где 192.168.42.1 — IP-адрес контроллера, а root — имя пользователя. Если вы подключаетесь к контроллеру в первый раз, то система предложит принять сертификат — введите yes.

IP-адрес зависит от способа подключения и настроек контроллера. Подробнее читайте в статье Как узнать IP-адрес контроллера.

Основные команды консоли

  • ls — выводит список файлов.
  • ls -l — выводит список файлов, а также права доступа, владельца и путь к оригиналу, если файл является ссылкой.
  • pwd — выводит путь к текущему каталогу, в котором мы находимся.
  • cd — меняет текущий каталог:
    • перейти в указанный каталог:
      cd /путь/к/каталогу
      
    • перейти на верхний уровень:
      cd ..
      
    • перейти в домашний каталог пользователя:
      cd ~
      
  • mv — перемещает файл или каталог, можно использовать и для переименования:
    # переместить файл
    mv ~/filename.txt /новый_путь/filename.txt
    
    # переместить каталог
    mv ~/dirname /новый_путь/dirname
    
    # переименовать файл
    mv ~/filename.txt ~/newfilename.txt
    
  • rm — удаляет файлы и каталоги:
    # удалить файл
    rm ~/filename.txt
    
    # удалить каталог каталог со всем содержимым
    rm -r ~/dirname
    
  • cp — копирует файлы и каталоги:
    cp file.txt file_backup.txt
    
  • cat — выводит содержимое файла на экран:
    cat file.txt
    
  • mkdir — создаёт один или несколько каталогов с указанным именем:
    mkdir newdirname
    
  • chmod — изменяет права доступа к файлам и каталогам:
    # использование
    chmod опции /путь/к/файлу
    
    # например, сделать файл исполняемым
    chmod +x ~/filename.txt
    
  • touch — создаёт файлы любого типа:
    touch newfilename.txt
    
  • find — поиск файлов, например, найдём файл interfaces в каталоге /mnt/data/:
    # find /mnt/data -name "interfaces"
    /mnt/data/etc/network/interfaces
    
  • nano редактор текстовых файлов.
  • df — показывает доступное дисковое пространство:
    # df -hT
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/root      ext4      980M  818M   95M  90% /
    devtmpfs       devtmpfs  239M     0  239M   0% /dev
    tmpfs          tmpfs     248M     0  248M   0% /dev/shm
    tmpfs          tmpfs      99M  1.2M   98M   2% /run
    tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
    /dev/mmcblk0p6 ext4      4.7G  1.9G  2.7G  41% /mnt/data
    tmpfs          tmpfs      50M     0   50M   0% /run/user/0
    
  • --help — посмотреть справку по команде:
    cd --help
    

Обновление прошивки

Приветственный экран команды screen

При подключении по SSH есть риск, что соединение будет разорвано: закрыли окно подключения, пропала связь и т.п. Поэтому важные команды, например, обновление прошивки, лучше выполнять через утилиту screen. Утилита создаст на контроллере виртуальную сессию командной оболочки, поэтому обрыв связи не повлияет на выполнение запущенных в ней команд.

Утилита не входит в стандартный пакет программ, поэтому ее нужно сначала установить:

apt install screen

Как работать:

  1. Запустите сеанс screen командой:
    screen
    
    После подключения вы увидите приветственный экран программы, нажмите на клавиатуре Пробел или Enter — откроется виртуальная консоль, которая внешне ничем не отличается от обычной.
  2. Дальше вводите нужные вам команды, а при разрыве связи достаточно будет переподключиться к контроллеру и открыть работающий сеанс командой:
    screen -r
    
  3. Для выхода из виртуальной консоли введите:
    exit