Безопасный удаленный запуск команд с помощью nsh в Ubuntu 18.04

Постоянно управлять несколькими машинами бывает сложно. Secure Shell (SSH) хорошо защищает операции удаленного доступа, но сам протокол имеет некоторые недостатки, которые касаются удобства и безопасности.

Например, удаленные машины должны иметь внешний IP-адрес и переадресованный порт для доступа к ним, что делает их доступными в интернете (или, по крайней мере, к более широкой сети). Это особенно важно, если вы используете парольную аутентификацию вместо пары SSH ключей. Если вы не знаете открытый ключ удаленного компьютера заранее, вы можете подвергнуться атаке «man-in-the-middle». Кроме того, многие удаленные машины, доступ к которым вам нужен, либо не имеют внешнего IP-адреса, либо имеют динамический IP-адрес, который вы можете не знать.

Также SSH использует одно соединение на удаленный сеанс. Если пользователю необходимо выполнить одну команду на сотне или даже на тысяче компьютеров, он должен сначала установить соединение с каждой машиной с помощью рукопожатия TCP, что не очень эффективно.

Оболочка NKN, или nsh – это альтернатива SSH, которая предлагает удобный и безопасный способ удаленного выполнения команд. Оболочка nsh использует преимущества глобальной публичной сети NKN, что обеспечивает безопасную и децентрализованную передачу данных. Архитектура использует уникальные адреса, которые содержат открытый ключ (он применяется как для маршрутизации, так и для сквозного шифрования без инфраструктуры открытого ключа (PKI)). Эта сеть не требует, чтобы удаленный сервер имел внешний IP-адрес, он должен иметь доступ только к Интернету и возможность устанавливать исходящие соединения веб-сокета и HTTP. Таким образом, удаленные машины остаются закрытыми для интернета.

В этом мануале мы научим вас использовать демон оболочки NKN и клиентское приложение Xterm для NKN Shell для выполнения команд на удаленном компьютере. Для этого мы установим и настроим демон NKN Shell на удаленной машине с доступом к Интернету, сгенерируем пару ключей и установим соединение с клиентом.

Требования

  • Сервер Ubuntu 18.04, полностью настроенный согласно этому мануалу.
  • Веб-браузер на локальной машине.

1: Установка демона оболочки NKN

Сначала установите демон оболочки NKN (nsd) на свой сервер. Это приложение вызовет nkn-multiclient, который подключится к публичной сети NKN и получит адрес для маршрутизации. Затем демон начнет прослушивать входящие команды оболочки от аутентифицированных и занесенных в белый список клиентов, выполнять эти команды и отправлять результаты обратно.

Для начала загрузите последнюю предварительно собранную версию nshd с GitHub:

wget https://github.com/nknorg/nkn-shell-daemon/releases/latest/download/linux-amd64.tar.gz

Распакуйте архив:

tar -zxvf linux-amd64.tar.gz

Затем переместите файлы в каталог /usr/local/bin, чтобы они были доступны для всей системы:

sudo mv ./linux-amd64/* /usr/local/bin/

Настройте автозапуск демона через Systemd, чтобы он перезагружался при перезагрузке сервера. Сначала создайте файл по имени nshd.service в /etc/systemd/system:

sudo nano /etc/systemd/system/nshd.service

Добавьте в файл следующее определение сервиса:

[Unit]
Description=NKN Shell Daemon
After=network.target
[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/usr/local/bin/nshd
[Install]
WantedBy=multi-user.target

Читайте также: Основы Systemd: управление сервисами и журналирование

Сохраните файл и выйдите из редактора. Затем включите и запустите сервис nshd с помощью следующих команд:

sudo systemctl enable nshd.service
sudo systemctl start nshd.service

Выполните следующую команду, чтобы убедиться, что сервис запущен и работает:

sudo systemctl status nshd.service

Вы увидите статус active:

nshd.service - NKN Shell Daemon
Loaded: loaded (/etc/systemd/system/nshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-02-19 19:16:02 UTC; 7s ago
Main PID: 3457 (nshd)
Tasks: 10 (limit: 1152)
CGroup: /system.slice/nshd.service
└─3457 /usr/local/bin/nshd
Feb 19 19:16:02 your_hostname systemd[1]: Started NKN Shell Daemon.
Feb 19 19:16:03 your_hostname nshd[3457]: Create directory /etc/nshd/
Feb 19 19:16:03 your_hostname nshd[3457]: Create password and save to file /etc/nshd/wallet.pswd
Feb 19 19:16:03 your_hostname nshd[3457]: Create wallet and save to file /etc/nshd/wallet.json
Feb 19 19:16:03 your_hostname nshd[3457]: Create authorized pubkeys file /etc/nshd/authorized_pubkeys
Feb 19 19:16:03 your_hostname nshd[3457]: Listening at d46567b883a3070ee3fe879d9fa2d5dc55a95f79ff2797c42df36c6979e5c4Aba

Чтобы подключиться к серверу, вам нужно получить его NKN-адрес, который можно найти в выходных данных предыдущей команды. Также его можно получить с помощью этой команды:

nshd addr

Вы увидите ваш адрес:

e70ca28ede84fc0659f2869255e8a393aef35b4fa5a7e036f29127c7dba75383

Скопируйте его куда-то, он понадобится вам для подключения к вашему серверу.

Теперь демон работает и прослушивает соединения. Пора настроить веб-клиент для связи с сервером.

2: Настройка привилегий NKN Shell Client

Для дальнейшей работы вам потребуется совместимый клиент, который может подключаться к удаленному компьютеру. В этом мануале мы предлагаем использовать Xterm, веб-клиент оболочки NKN. Есть несколько способов запустить его:

  • Использовать версию, размещенную на сайте https://nsh.nkn.org/. Обратите внимание: хотя эта веб-страница размещена на сервере, на самом деле это чисто локальное веб-приложение, которое запускается в вашем браузере.
  • Скачать исходный код и обслуживать его самостоятельно.
  • Использовать расширение Chrome nShell.

В этом мануале мы предлагаем использовать версию, размещенную на сайте. Откройте веб-браузер на вашем локальном компьютере и перейдите на https://nsh.nkn.org. Вы увидите приветственную страницу:

Нажмите Generate New Key Pair. Это сгенерирует ваши ключи и выведет их на экран:

Примечание: При создании новой пары ключей вы увидите Secret Seed. Храните его в безопасности, как секретный ключ SSH. Любой, у кого есть Secret Seed, может использовать его для восстановления вашего открытого ключа и запуска команд на удаленных машинах. Ваш браузер запомнит значение Secret Seed, но вы должны скопировать его в безопасное место, чтобы иметь к нему доступ на новом компьютере.

Сохраните Secret Seed в безопасном месте. Позже вы сможете использовать его для восстановления открытого ключа, чтобы подключиться с другого клиентского компьютера.

Поскольку это новая пара ключей, вы должны добавить открытый ключ (Public Key) в файл /etc/nshd/authorized_pubkeys на вашем сервере.

Файл /etc/nshd/authorized_pubkeys – это по сути аналог файла ~/authorized_keys, который определяет, какие открытые SSH ключи могут входить в систему. Файл authorized_pubkeys указывает, какой пользователь связан с тем или иным ключом. В целях безопасности сейчас лучше войти в систему как пользователь без прав root. Для этого нужно связать сгенерированный открытый ключ с вашим пользователем sudo ( у нас это 8host), которого вы создали во время начальной настройки сервера.

Чтобы связать пользователя с открытым ключом, вам необходимо получить идентификатор пользователя (UID) и идентификатор его группы (GID). Выполните следующую команду на своем сервере, войдя в систему как пользователь 8host:

id

Вы получите значения UID и GID:

uid=1000(8host) gid=1000(8host) groups=1000(8host),27(sudo)

Теперь откройте файл author_pubkeys в вашем редакторе:

sudo nano /etc/nshd/authorized_pubkeys

Добавьте одну строку, содержащую открытый ключ, uid и gid через пробел:

5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

Сохраните файл.

Убедитесь, что файл содержит правильные значения:

cat /etc/nshd/authorized_pubkeys

Эта команда выведет ваши данные на экран:

5d5367a5730427c205904a4457392051d2045dbce0186518fb6eb24dd9e41ba6 1000 1000

Затем перезапустите демон nshd, чтобы применить новые настройки:

sudo systemctl restart nshd.service

Теперь давайте проверим настройки: подключимся к серверу и удаленно выполним команду.

3: Отправка команды на удаленный компьютер и получение ответа

В NKN Shell Client введите свой удаленный адрес nshd (который скопировали в разделе 1), а также идентификатор клиента (это опционально).

Нажмите Connect, чтобы установить соединение.

Вы будете подключены к удаленной машине и увидите в браузере окно терминала. Его вы можете использовать так же, как SSH. Для примера выполните следующую команду, чтобы перейти в каталог /etc/nshd:

cd /etc/nshd

Затем запросите его содержимое:

ls

Вы увидите содержимое каталога на своем экране:

authorized_pubkeys  wallet.json  wallet.pswd

Вы можете сбросить соединение, набрав exit. Если вам необходимо восстановить соединение, вернитесь в веб-интерфейс и введите данные о своем соединении. Если вы генерируете новую пару ключей, вам необходимо добавить на сервер новый открытый ключ.

Заключение

В этом мануале вы научились устанавливать и настраивать nsh для безопасной и удобной отправки команд на удаленный компьютер. Nsh – отличный способ получить доступ к удаленным машинам, с его помощью можно быстро запустить команду, чтобы узнать текущее состояние сервиса или просмотреть некоторые параметры конфигурации. Приложение основано на глобальной общедоступной сети NKN, и его можно использовать бесплатно, а значит вы можете включить его в свое собственное приложение или рабочий процесс.

Вы также можете рассмотреть как вариант nkn-tunnel, который поддерживает SSH.

Tags: , , , ,

Добавить комментарий