Nano Hash - криптовалюты, майнинг, программирование

Хост аутентификации NodeJS SSH и выполнение команды

Я хочу иметь приложение NodeJS, к которому я могу подключиться через SSH с открытым ключом и отправить ему некоторые данные. Чтобы быть более явным, это должно выглядеть следующим образом:

  • Приложение NodeJS имеет некоторые написанные функции
  • С сервера я запускаю приложение nodejs по ssh и пытается идентифицировать меня по моему открытому ключу.
  • После того, как я пройду аутентификацию, я могу отправить ему несколько строк, приложение проанализирует строку и выполнит различные функции.

Единственная проблема заключается в том, что мне не удается сделать это с любым существующим пакетом SSH npm. Я хочу, чтобы приложение nodejs просто принимало SSH-соединение, выполняло аутентификацию и ждало некоторых строк. Это возможно?

РЕДАКТИРОВАТЬ: я хочу использовать этот подход, потому что я хочу вызывать функции узла только для выполнения чего-либо только от некоторых разрешенных клиентов (серверов), и я не хочу отправлять эти запросы через HTTP, чтобы любой мог получить к нему доступ

27.09.2014

  • SSH обычно позволяет вам выполнять команды, которые могут быть направлены на ваше приложение узла. Почему вы хотите сделать часть SSH в узле? 28.09.2014
  • потому что вместо некоторых сценариев bash, которые я запускаю с параметрами из SSH, я просто хочу выполнять некоторые функции узла, которые выполняют несколько задач. И вместо того, чтобы вызывать приложение node с сервера с помощью HTTP-запросов, я хотел бы использовать тип подключения SSH, поскольку он более безопасен. Потому что я хочу, чтобы запросы поступали только от нескольких разрешенных клиентов. 28.09.2014
  • HTTPS недостаточно хорош? Другим вариантом было бы настроить приложение узла в качестве оболочки входа пользователя :) 28.09.2014
  • HTTPS достаточно. Но моя главная проблема в том, что я не хочу, чтобы запросы поступали с любого другого IP-адреса, кроме IP-адреса с данного сервера. Таким образом, никто другой не мог инициировать запросы с любого другого IP-адреса. К настоящему времени я использую экспресс, чтобы разрешать запросы только с 1 IP. Но в этой функции я должен разрешать запросы от других нескольких серверов, которыми я владею, и этот скрипт будет работать на многих других серверах. Что сделает это беспорядком в управлении. 28.09.2014
  • Это приложение будет развернуто на нескольких серверах/vps. Поэтому, если я собираюсь обновить разрешенные IP-адреса, было бы беспорядок получить доступ к каждому серверу/vps и обновить разрешенные IP-запросы. Вот почему я изучаю что-то подобное, чтобы я мог аутентифицироваться с помощью открытого ключа. 28.09.2014
  • Вы также можете пройти аутентификацию с помощью открытого ключа через HTTPS. 28.09.2014

Ответы:


1

Вероятно, вам лучше использовать HTTPS с клиентскими сертификатами, а не использовать SSH-сервер внутри узла (хотя вы можете сделать это с помощью ssh модуль, привязка к libssh2), если вы хотите использовать сертификаты.

Вот как вы настроили HTTPS-сервер:

var https = require('https'),
    fs = require('fs');

var options = {
  key: fs.readFileSync('server.key'), // server private key
  cert: fs.readFileSync('server.crt'), // server certificate
  ca: fs.readFileSync('server_ca.crt'), // server CA, this can be an array of CAs too
  requestCert: true
};

https.createServer(options, function(req, res) {
  if (req.client.authorized) {
    res.writeHead(200);
    res.end('Hello world!');
  } else {
    res.writeHead(401);
    res.end();
  }
}).listen(443);

Затем нужно просто сгенерировать клиентский сертификат с помощью ЦС сервера, который вы используете с вашим HTTPS-клиентом.

Для подключения к HTTPS-серверу:

Для cURL командная строка будет выглядеть примерно так: curl -v -s --cacert server_ca.crt --key client.key --cert client.crt https://localhost или пропустить проверку сервера: curl -v -s -k --key client.key --cert client.crt https://localhost

Для node.js вы можете использовать клиентский код, например:

var https = require('https'),
    fs = require('fs');

var options = {
  // normal http.request()-specific options
  method: 'GET',
  path: '/',

  // tls.connect()-specific options
  key: fs.readFileSync('client.key'), // client private key
  cert: fs.readFileSync('client.crt'), // client certificate
  ca: fs.readFileSync('server_ca.crt'), // server CA, this can be an array of CAs too
  // or comment out the `ca` setting and use the following to skip server verification,
  // similar to cURL's `-k` option:
  //rejectUnauthorized: false
};

https.request(options, function(res) {
  if (res.statusCode === 200)
    console.log('Accepted!');
  else
    console.log('Rejected!');

  // drain and discard any response data
  res.resume();
}).end();
28.09.2014
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..