Русский
Русский
English
Статистика
Реклама

Выделенный сервер

Секретная информация? Используй 2FA для VPSVDS

20.10.2020 20:09:53 | Автор: admin
image

Часто задаваемый вопрос, как надежно защитить свой VPS / выделенный сервер от взлома? Поэтому я решил написать инструкцию о внедрении двухфакторной аутентификации.

2FA является вторым уровнем защиты данных, благодаря которому получить доступ к учетной записи можно только после подтверждения собственной личности. Теперь, даже если злоумышленник будет знать логин и пароль, благодаря двухфакторной аутентификации он не сможет получить доступ к вашему серверу.

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

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

image

Берем в руки телефон и осуществляем настройку приложения аутентификатора. Сделать это достаточно просто. Можно использовать разные программы, но я рекомендую Twilio Authy 2-Factor Authentication.
Скачать ее можно по этой ссылке: https://play.google.com/store/apps/details?id=com.authy.authy&hl=ru
Официальный сайт программы: authy.com
Преимуществом Twilio Authy 2-Factor Authentication является возможность работать сразу на нескольких устройствах одновременно, даже на десктопе или ноутбуке. В Google Authenticator такой возможности нет. Если вы вдруг потеряете свой смартфон, вы сохраните все свои данные для доступа к аккаунтам.
Устанавливаем приложение с Google Play и запускаем его. Затем система попросит ввести код страны и номер телефона. Обязательно указывайте тот номер телефона, к которому у вас имеется доступ. Также не забудьте указать свой e-mail.

image

Следующий шаг подтверждение. Выберите тот способ, который наиболее удобен для вас получение sms-сообщения или ответ на звонок.
Пакет аутентификатора нужно будет установить в систему. Делается это следующим образом:
Для Debian 9/10:
root@alexhost:~# apt install libpam-google-authenticator - y

Для CentOS в первую очередь нужно будет подключить epel репозиторий:
root@alexhost:~# yum install epel-release

Только после этого можно будет установить пакет:
root@alexhost:~# yum install google-authenticator

На следующем этапе запускаем
root@alexhost:~# google-authenticator

Система задаст вопрос: Do you want authentication tokens to be time-based (y/n. Отвечаем y, т.к такой вариант наиболее надёжный.

image

На вопрос Do you want me to update your "/root/.google_authenticator" file? (y/n) отвечаем y

На вопрос Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) отвечаем в зависимости от того, насколько сильно вы беспокоитесь о безопасности и готовы ради нее пожертвовать удобством.

Дело в том, что войти, используя аутентификатор, можно будет не чаще, чем раз в 30 секунд. Не слишком удобно, но однозначно безопаснее.

Дальше нас ждет еще один вопрос: By default, a new token is generated every 30 seconds by the mobile app. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. This allows for a time skew of up to 30 seconds between authentication server and client. If you experience problems with poor time synchronization, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the 8 previous codes, the current code, and the 8 next codes). This will permit for a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n) отвечаем y

Очередной вопрос: If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s.

Вновь смотрите, что для вас важнее удобство или безопасность. Единственного правильного ответа нет, все зависит от ваших предпочтений. Если вы ответите y, система разрешит не более 3 попыток входа в течение 30 секунд.

image

Следующее, что вам нужно будет сделать это нажать на + в приложении аутентификаторе и отсканировать предложенный qr код в терминале

image

Затем понадобится установить защитный пароль для бекапов, который будет состоять минимум из 6 символов. Разумеется, все аккаунты, добавленные в приложение, сохраняются в облаке.
Сохраните свой аккаунт под любым удобным вам именем

image

Внимание! Не забудьте записать экстренные коды. В рассматриваемом нами случае, это:
Your emergency scratch codes are:
13455461
88816366
91315051
48752467
40022285


root@alexhost:~# nano /etc/pam.d/sshd

В самом конце файла необходимо будет добавить auth required pam_google_authenticator.so
Сохраните файл Ctrl+O, а затем нажмите Enter
Выходим из редактора, нажав одновременно клавиши Ctrl+X
Кстати, вы без проблем сможете воспользоваться другим текстовым редактором. Вам вовсе необязательно использовать nano

image

Следующее, что нужно сделать:
root@alexhost:~# nano /etc/ssh/sshd_config заменить ChallengeResponseAuthentication no на ChallengeResponseAuthentication yes
Не забудьте обязательно добавить в конце файла AuthenticationMethods keyboard-interactive
Нажимаем Ctrl+O и сохраняем файл, затем Enter
Выходим из редактора Ctrl+X

image

На одном из последних этапов нужно будет перезапустить службу ssh
root@alexhost:~# systemctl restart sshd

Подключаемся. Система сперва запрашивает пароль, затем двухфакторный ключ

image

Вот и все поздравляем, настройка успешно завершена!


Немного рекламы


1.5 GB RAM / 1 Ядро / 10GB SSD диска 4 /месяц или 11.88 в год!
4GB RAM / 2 Ядро / 40GB SSD диска 10 /месяц или 60 в год!
8GB RAM / 4 Ядра / 80GB SSD диска от 16 /месяц или 144 в год!
ТУТ AlexHost.com
Подробнее..

Перевод Альтернатива ML-Agents интегрируем нейросети в Unity-проект с помощью PyTorch C API

05.06.2021 10:15:16 | Автор: admin


Кратко объясню, что будет происходить в этой статье:

  • покажу, как использовать PyTorch C++ API для интеграции нейросети в проект на движке Unity;
  • сам проект я подробно описывать не буду, это не имеет значения для данной статьи;
  • использую готовую модель нейросети, преобразовав её трассировку в бинарник, который будет подгружаться в рантайме;
  • покажу, что такой подход существенно облегчает деплой сложных проектов (например, нет проблем с синхронизацией сред Unity и Python).

Добро пожаловать в реальный мир


Методы машинного обучения, в том числе нейронные сети, по-прежнему очень комфортно себя чувствуют в экспериментальных окружениях, а запуск таких проектов в реальном мире часто вызывает трудности. Я немного расскажу про эти трудности, опишу ограничения по способам выхода из них, а также дам поэтапное решение проблемы интеграции нейросети в Unity-проект.

Другими словами, мне нужно превратить исследовательский проект на PyTorch в готовое решение, способное вместе с движком Unity работать в боевых условиях.

Можно несколькими способами интегрировать нейронную сеть в Unity. Я предлагаю использовать C++ API для PyTorch (под названием libtorch) для создания нативной разделяемой библиотеки, которую затем можно будет подключить к Unity как плагин. Существуют и другие подходы (например, использовать ML-Agents), которые в определённых случаях могут быть проще и эффективнее. Но преимущество моего подхода заключается в том, что он обеспечивает большую гибкость и даёт больше возможностей.

Допустим, у вас есть какая-то экзотическая модель и вы просто хотите использовать существующий PyTorch-код (который был написан без намерения общаться с Unity); или ваша команда разрабатывает собственную модель и не хочет отвлекаться на мысли о Unity. В обоих случаях код модели может быть сколь угодно сложным и использовать все возможности PyTorch. А если вдруг дело дойдёт до интеграции, в игру вступит C++ API и завернёт всё в библиотеку без малейшего изменения изначального PyTorch-кода модели.

Итак, мой подход сводится к четырём ключевым шагам:

  1. Настройка окружения.
  2. Подготовка нативной библиотеки (C++).
  3. Импорт функций из библиотеки / подключение плагина (Unity / C#).
  4. Сохранение / развёртывание модели.


ВАЖНО: поскольку я делал проект, сидя под Linux, некоторые команды и настройки отталкиваются от этой ОС; но не думаю, что здесь что-либо должно слишком зависеть от неё. Поэтому вряд ли подготовка библиотеки под Windows вызовет трудности.

Настройка окружения


Прежде чем устанавливать libtorch, убедитесь, что у вас есть

  • CMake

А если хотите использовать GPU, вам потребуются:


С CUDA могут возникнуть сложности, потому что драйвер, библиотеки и прочая хурма должны дружить между собой. И вам придётся поставлять эти библиотеки вместе с Unity-проектом чтобы всё работало из коробки. Так что для меня это самая неудобная часть. Если вы не планируете использовать GPU и CUDA, то знайте: вычисления замедлятся в 50100 раз. И даже если у пользователя довольно слабый графический процессор лучше с ним, чем без него. Даже если ваша нейросеть включается в работу довольно редко, эти редкие включения приведут к задержке, которая будет раздражать пользователя. Возможно, в вашем случае всё будет иначе, но нужен ли вам этот риск?

После того, как вы установили означенное выше ПО, пора загрузить и (локально) установить libtorch. Необязательно устанавливать для всех пользователей: можно просто поместить её в каталог своего проекта и обратиться к нему при запуске CMake.

Подготовка нативной библиотеки


Следующий шаг конфигурирование CMake. Я взял за основу пример из документации PyTorch и изменил его так, чтобы после сборки мы получали библиотеку, а не исполняемый файл. Положите этот файл в корневой каталог вашего проекта с нативной библиотекой.

CMakeLists.txt

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)project(networks)find_package(Torch REQUIRED)set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS})add_library(networks SHARED networks.cpp)target_link_libraries(networks ${TORCH_LIBRARIES})set_property(TARGET networks PROPERTY CXX_STANDARD 14)if (MSVC)file(GLOB TORCH_DLLS ${TORCH_INSTALL_PREFIX}/lib/*.dll)add_custom_command(TARGET networksPOST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different${TORCH_DLLS}$<TARGET_FILE_DIR:example-app>)endif (MSVC)

Исходный код библиотеки будет размещён в networks.cpp.

В этом подходе есть ещё одна приятная особенность: нам пока не нужно думать, какую именно нейронную сеть мы хотим использовать с Unity. Причина (немного забегая вперед) заключается в том, что мы в любой момент можем запустить сеть в Python, получить её трассировку и просто сказать libtorch применить эту трассировку для этих входов. Поэтому, можно сказать, что наша нативная библиотека просто обслуживает некий чёрный ящик, работая с вводом-выводом.

Но если вы хотите усложнить задачу и, например, реализовать обучение сети прямо во время работы среды Unity, то вам придётся написать на C++ архитектуру сети и обучающий алгоритм. Однако это выходит за рамки данной статьи, поэтому для получения дополнительной информации я отсылаю вас к соответствующему разделу документации PyTorch и репозиторию с примерами кода.

В любом случае, в network.cpp нам нужно определить внешнюю функцию для инициализации сети (загрузка с диска) и внешнюю функцию, которая запускает сеть с входными данными и возвращает результаты.

networks.cpp

#include <torch/script.h>#include <vector>#include <memory>extern C{// This is going to store the loaded networktorch::jit::script::Module network;

Чтобы вызывать функции нашей библиотеки непосредственно из Unity, нужно передать информацию об их точках входа. В Linux я использую для этого __attribute__((visibility(default))). В Windows для этого существует спецификатор __declspec( dllexport ), но, честно говоря, я не проверял, работает ли он там.

Итак, начнём с функции загрузки трассировки нейросети с диска. Файл имеет относительный путь он лежит в корневом каталоге проекта Unity, а не в Assets/. Так что будьте внимательны. Вы также можете просто передать имя файла из Unity.
extern __attribute__((visibility(default))) void InitNetwork(){network = torch::jit::load(network_trace.pt);network.to(at::kCUDA); // If we're doing this on GPU}

Теперь перейдём к функции, которая кормит сеть входными данными. Напишем на С++ код, который использует указатели (ими управляет Unity) для перегонки данных туда и обратно. В этом примере я полагаю, что моя сеть имеет входы и выходы фиксированной размерности и запрещаю Unity менять это. Здесь, например, я возьму Tensor {1,3,64,64} и Tensor {1,5,64,64} (например, такая сеть нужна для сегментации пикселей RGB-изображений на 5 групп).

В общем случае вам придётся передать информацию о размерности и объёме данных, чтобы избежать переполнения буфера.

Чтобы преобразовать данные в формат, с которым работает libtorch, мы используем функцию torch::from_blob. Она принимает массив чисел с плавающей запятой и описание тензора (с указанием размерности) и возвращает созданный Тензор.

Нейросети могут принимать несколько входных аргументов (например, вызов forward () принимает x, y, z в качестве входных данных). Чтобы справиться с этим, все входные тензоры упаковываются в вектор стандартной библиотеки шаблонов torch::jit::IValue (даже если аргумент только один).

Чтобы получить данные из тензора, проще всего обработать их поэлементно, но если из-за этого упадёт скорость обработки, для оптимизации процесса чтения данных можно использовать Tensor::accessor. Хотя лично мне это не понадобилось.

В результате для моей нейросети получается вот такой простой код:

extern __attribute__((visibility(default))) void ApplyNetwork(float *data, float *output){Tensor x = torch::from_blob(data, {1,3,64,64}).cuda();std::vector<torch::jit::IValue> inputs;inputs.push_back(x);Tensor z = network.forward(inputs).toTensor();for (int i=0;i<1*5*64*64;i++)output[i] = z[0][i].item<float>();}}

Чтобы скомпилировать код, следуйте указаниям в документации, создайте подкаталог build/ и запустите следующие команды:

cmake -DCMAKE_PREFIX_PATH=/absolute/path/to/libtorch <strong>..</strong>cmake --build <strong>.</strong> --config Release

Если всё пойдёт хорошо, будут созданы файлы libnetworks.so или networks.dll, которые вы сможете разместить в Assets/Plugins/ вашего Unity-проекта.

Подключение плагина к Unity


Для импорта функций из библиотеки используем DllImport. Первая функция, которая нам понадобится, это InitNetwork(). При подключении плагина Unity вызовет именно её:

using System.Runtime.InteropServices;public class Startup : MonoBehaviour{...[DllImport(networks)]private static extern void InitNetwork();void Start(){...InitNetwork();...}}

Чтобы движок Unity (С#) мог обмениваться данными с библиотекой (C++), я поручу ему всю работу по управлению памятью:

  • выделю память под массивы нужного размера на стороне Unity;
  • передам адрес первого элемента массива в функцию ApplyNetwork (её тоже перед этим нужно импортировать);
  • просто позволю адресной арифметике C++ обращаться к этой памяти при получении или отправке данных.

В коде библиотеки (С++) я должен избегать какого-либо выделения или освобождения памяти. С другой стороны, если я передаю адрес первого элемента массива из Unity в функцию ApplyNetwork, я должен сохранять этот указатель (и соответствующий участок памяти) до тех пор, пока нейросеть не завершит обработку данных.

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

[DllImport(networks)]private static extern void ApplyNetwork(ref float data, ref float output);void SomeFunction() {float[] input = new float[1*3*64*64];float[] output = new float[1*5*64*64];// Load input with whatever data you want...ApplyNetwork(ref input[0], ref output[0]);// Do whatever you want with the output...}

Сохранение модели


Статья близится к концу, а мы так и обсудили, какую нейронную сеть я выбрал для моего проекта. Это простая свёрточная нейросеть, которую можно использовать для сегментации изображений. Я не включил в модель сбор данных и обучение: моя задача рассказать про интеграцию с Unity, а не про заморочки с трассировкой сложных нейросетей. Не обессудьте.

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

Так может выглядеть Python-код для нашей простой модели:

import torchimport torch.nn as nnimport torch.nn.functional as Fclass Net(nn.Module):def __init__(self):super().__init__()self.c1 = nn.Conv2d(3,64,5,padding=2)self.c2 = nn.Conv2d(64,5,5,padding=2)def forward(self, x): z = F.leaky_relu(self.c1(x)) z = F.log_softmax(self.c2(z), dim=1)return zКод не очень красивый, конечно, но, думаю, идея понятна.Сохранить (экспортировать) модель с текущими значениями коэффициентов можно так:network = Net().cuda()example = torch.rand(1, 3, 32, 32).cuda()traced_network = torch.jit.trace(network, example)traced_network.save(network_trace.pt)

Развёртывание модели


Мы сделали статическую библиотеку, но для развёртывания этого недостаточно: в проект нужно включить дополнительные библиотеки. К сожалению, у меня нет 100-процентной уверенности в том, какие именно библиотеки нужно включить обязательно. Я выбрал libtorch, libc10, libc10_cuda, libnvToolsExt и libcudart. В сумме они добавляют 2 Гб к изначальному размеру проекта.

LibTorch vs ML-Agents


Я считаю, что для многих проектов, особенно в области исследований и прототипирования, действительно стоит выбрать ML-Agents, плагин, созданный специально для Unity. Но когда проекты становятся более сложными, нужно подстраховаться на случай, если что-то пойдёт не так. А такое случается нередко

Пару недель назад я как раз использовал ML-Agents для взаимодействия между демо-игрой на Unity и парой нейронных сетей, написанных на Python. В зависимости от игровой логики Unity вызывал одну из этих сетей с разными наборами данных.

Мне пришлось основательно покопаться в Python API для ML-Agents. Некоторые операции, которые я использовал в моих нейросетях, например 1d свёртка и операции транспонирования, не поддерживались в Barracuda (это библиотека трассировки, которую в настоящее время использует ML-Agents).

Проблема, с которой я столкнулся, заключалась в том, что ML-Agents собирает запросы от агентов в течение некого временного интервала, а затем для оценки отправляет, к примеру, в Jupyter notebook. Однако некоторые из моих нейросетей зависели от результатов работы других моих сетей. И, чтобы получить оценку всей цепочки моих нейронных сетей, мне пришлось бы каждый раз, делая запрос, ждать какое-то время, получать результат, делать другой запрос, ждать, получать результат и так далее. Кроме того, порядок включения этих сетей в работу нетривиально зависел от ввода данных пользователем. А это означало, что я не мог просто последовательно запускать нейросети.

Кроме того, в некоторых случаях объём данных, который мне нужно было отправить, должен был варьироваться. А ML-Agents больше рассчитан на фиксированную размерность для каждого агента (вроде бы её можно менять на лету, но я отношусь к этому скептически).

Я мог бы сделать что-то вроде вычисления последовательности вызова нейросетей по запросу, отправляя соответствующие входные данные для Python API. Но из-за этого мой код, как на стороне Unity, так и на стороне Python, стал бы слишком сложным, или вовсе избыточным. Поэтому я решил изучить подход с использованием libtorch и не прогадал.

Если бы раньше кто-нибудь попросил меня встроить в Unity-проект предсказательную модель GPT-2 или MAML, я бы посоветовал ему постараться обойтись без этого. Реализация такой задачи с использованием ML-Agents слишком сложна. Но теперь я могу найти или разработать любую модель с PyTorch, а потом завернуть её в нативную библиотеку, которая подключается к Unity как обычный плагин.



Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

NetSarang xShell мощный клиент SSH

21.10.2020 16:06:58 | Автор: admin
image

Всё ещё пользуетесь Putty + WinSCP/FileZilla?
Тогда рекомендуем обратить внимание на такое ПО как xShell

Он поддерживает не только SSH протокол, но и другие. Например, telnet или rlogin
Одновременно можно подключаться к нескольким серверам (механизм вкладок).
Нет необходимости каждый раз вводить данные, их можно запомнить.
Начиная с 6й версии появился русский интерфейс, понимает все русские кодировки, в том числе и UTF-8.
Поддерживает как подключение по паролю, так и подключение по ключу.

Более того, теперь для управления файлами по ftp/sftp не нужно отдельно запускать WinSCP или FileZilla.
Разработчики xShell учли ваши нужды и сделали также xFtp, который поддерживает обычный FTP и SFTP.
А самое главное то, что xFtp можно запустить прямо из активной ssh сессии и он сразу подключится к этому
конкретному серверу в режиме передачи файлов (используя sFtp протокол). Но вы можете и
самостоятельно открыть xFtp и подключится к любому из серверов.

Также в комплекте поставляется генератор публичных/приватных ключей и менеджер по их управлению.

image

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

www.netsarang.com/ru/free-for-home-school

Заполнить поля, обязательно email, к которому у вас есть доступ, туда будет выслана ссылка для скачивания.

image

Скачиваем, устанавливаем оба приложения. Запускаем.

После запуска видим окошко со списком сохранённых сессий, пока оно пустое. Нажимаем новая

image

Заполняем данные для подключение, порт/хост/ип адрес, а также желаемое имя сессии.
Далее переходим в аутентиикация и заполняем логин с паролем

image

Далее Ок и подключаемся к серверу.

Для xFTP всё тоже самое. Единственное что необходимо выбрать протокол, по умолчанию будет sFTP, можно выбрать обычный FTP.

Самое удобоное то выделенный текст автоматически копируется в буфер обмена
(Инструменты опции клавиатура и мышь копировать отмеченный текст в буфер обмена)

image

Подключатся можно не только по паролю, но и используя ключ, что куда безопаснее и удобнее.

Необходимо сгенерировать наш ключ, если быть точнее пару публичный/приватный ключи.

Запускаем Xagent (устанавливается в комплекте)

Видим список ключей, пока он пуст. Нажимаем Manage Keys, затем Generate
Type RSA
Length 4096 bits минимум.

image

Нажием Next, ждём. Затем ещё раз Next

Называем ключ как нам удобно, по желанию можно защитить ключ установив дополнительный пароль (он будет запрашивается при подключении или импорте ключа на другом устройстве)

image

Далее Next и видим собственно наш ПУБЛИЧНЙ ключ. Его используем для подключения к серверу. Один ключ можно использовать на многих серверах, что удобно.

На этом генерация закончена, но ещё не всё.
Необходимо добавить ключ на сервере
Подключаемя к серверу по ssh и переходим в /root/.ssh

root@alexhost# cd /root/.ssh

на что в 90% случаев получаем ошибку -bash: cd: /root/.ssh: No such file or directory
это нормально, данная папка отсутствует если на сервере ранее не генерировались ключи.

Необходимо подобным образом сгенерировать и ключ самого сервера.

root@alexhost# ssh-keygen -t rsa -b 4096

Нам предложит путь куда сохранить файл ключа
Соглашаемся на умолчание /root/.ssh/id_rsa нажатием Enter
Далее пароль на файл ключа и подтверждение, либо оставить пустым и Enter.

опять заходить в /root/.ssh

root@alexhost# cd /root/.ssh

Необходимо создать файл authorized_keys

root@alexhost# nano authorized_keys

Вставляем в него наш ключ в текстовом виде полученный выше

image

Сохраняем, выходим.
Ctrl + O
Ctrl + X

Переходим в xShell, вызываем список сохранённых сессий (Alt+O)

image

находим нашу сессию, нажимаем свойства, переходим на аутентификация

в поле метод выбираем public key
в поле пользовательский ключ выбираем наш созданный ранее ключ, сохраняем подключаемся.

image

Клиент использует ПРИВАТНЙ ключ, на сервере прописывается ПУБЛИЧНЙ

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

В Xagent manage keys, выбираем ключ Export, сохраняем.
На другом пк Xagent manage keys Import, выбираем, добавляем. Если ключ был защищён паролем, пароль будет запрошен в этот момент.

Ключ можно прописать любому пользователю, не только root.
Путь стандартный /домашняя_папка_пользователя/.ssh/authorized_keys
Для юзера alexhost, например, по умолчанию это будет /home/alexhost/.ssh/authorized_keys

image
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru