1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/minbox-projects-ssh-agent

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ssh-agent

Предоставляет способ SSH-прокси, поддерживает аутентификацию «имя пользователя + открытый ключ» и «имя пользователя + пароль», устанавливает канал связи между локальным портом и удалённым портом.

Как использовать?

ssh-agent уже доступен на Maven Central, использование зависит от среды сборки.

Maven:

Добавьте следующую зависимость в файл pom.xml:

<dependency>
  <groupId>org.minbox.framework</groupId>
  <artifactId>ssh-agent</artifactId>
  <version>1.0.2</version>
</dependency>

Gradle:

Добавьте следующую зависимость в файл build.gradle:

implementation 'org.minbox.framework:ssh-agent:1.0.2'

Использование в проекте SpringBoot

Пример проекта можно найти здесь: api-boot-sample-ssh-agent.

Шаг 1: Добавьте зависимость

В файле pom.xml добавьте зависимость api-boot-starter-ssh-agent:

<dependency>
  <groupId>org.minbox.framework</groupId>
  <artifactId>api-boot-starter-ssh-agent</artifactId>
</dependency>

Если добавленная зависимость не найдена или не может быть загружена, посетите официальный сайт для быстрого начала работы: Quick Start Guide.

Шаг 2: Настройте переадресацию прокси-порта

Настройте в файле конфигурации application.yml, вы можете комбинировать профили Spring для активации различных конфигураций прокси-среды.

# ApiBoot related configuration
api:
  boot:
    # Configure connection to production environment SSH Agent
    ssh-agent:
      configs:
        # Connect to production MySQL
        - username: metadata
          server-ip: xxx.xxx.xx.xx
          local-port: 3307
          forward-target-port: 3306
        # Connect to production MongoDB
        - username: metadata
          server-ip: xxx.xxx.xx.xx
          local-port: 27018
          forward-target-ip: 192.168.1.220
          forward-target-port: 27017
        # Connect to production Redis
        - username: metadata
          server-ip: xxx.xxx.xx.xx
          local-port: 6378
          forward-target-port: 6379

Обратите внимание: если вы не используете аутентификацию по имени пользователя/паролю для прокси-аутентификации, вам необходимо добавить открытый ключ вашего компьютера в файл ~/.ssh/authorized_keys в домашнем каталоге удалённого сервиса.

Использование в Junit5

Шаг 1: Расширьте класс тестирования SshAgentJunitTest

@SpringBootTest
class SimulationServiceApiApplicationTests extends SshAgentJunitTest {
    @Test
    void contextLoads() {
        //...
    }
}

После расширения класса тестирования SshAgentJunitTest вы сможете запустить SSH-соединение перед выполнением тестового метода и закрыть соединение после выполнения.

Шаг 2: Создайте файл конфигурации ssh-agent.yml

Файл конфигурации ssh-agent.yml используется для настройки списка соединений SSH-прокси и находится в каталоге src/test/resources. Если этот файл не создан, при запуске теста будет выдано исключение.

configs:
  # Proxy forwarding MySQL
  - username: developer
    serverIp: x.x.x.x
    localPort: 3306
    forwardTargetPort: 59500
  # Proxy forwarding Redis
  - username: developer
    serverIp: x.x.x.x
    localPort: 6379
    forwardTargetPort: 59504
  # Proxy forwarding MongoDB
  - username: developer
    serverIp: x.x.x.x
    localPort: 27017
    forwardTargetPort: 59503

Зачем использовать?

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

Для обеспечения безопасности брандмауэры серверов обычно не открывают напрямую порты служб (например, MySQL => 3306). Кроме того, администраторы используют авторизацию открытых ключей для предоставления доступа. Как мы можем получить доступ к удалённой базе данных в нашем локальном проекте?

Если вы используете графические инструменты для баз данных (DataGrip, Navicat), вы можете легко подключиться, поскольку они предоставляют возможность подключения на основе SSH. Но что делать, если мы хотим использовать удалённые базы данных в наших локальных проектах? Попробуйте использовать ssh-agent.

ssh-agent может проксировать не только MySQL => 3306, но и все порты служб на сервере и других серверах в локальной сети, таких как MongoDB => 27017 и Redis => 6379.

Принцип работы

ssh-agent работает путём создания канала пересылки портов между локальным и удалённым серверами, подобно тому, как Docker взаимодействует с контейнерами.

Сначала необходимо войти на удалённый сервер. В настоящее время ssh-agent поддерживает два метода входа:

  • Метод имени пользователя и пароля: по умолчанию используется порт 22, и устанавливается безопасное соединение с сервером с использованием предоставленного имени пользователя и пароля.
  • Способ закрытого ключа: по умолчанию также используется порт 22 и устанавливается безопасное соединение с сервером, используя имя пользователя и закрытый ключ из домашнего каталога текущего пользователя. Это метод по умолчанию.

После успешного входа устанавливается канал пересылки между указанным локальным портом и портом удалённого сервера. Известные хост-файлы действительны только при способе авторизации SSH_PRIVATE_KEY. | |localPort | - | Это номер локального порта, максимальное значение: 65535 | |forwardTargetPort | - | Это номер целевого порта для переадресации, максимальное значение: 65535 | |forwardTargetIp | 127.0.0.1 | Это IP-адрес цели для переадресации. По умолчанию это 127.0.0.1 (локальный компьютер). Если необходимо получить доступ к другому серверу через локальную сеть, нужно изменить этот адрес | |addition | - | Это набор дополнительных параметров конфигурации, используемых в методе JSch Session#config |

AgentConnection

AgentConnection — это основной класс, который используется для установления соединения между локальным компьютером и удалённым сервером. Он должен быть инициализирован с помощью объекта экземпляра AgentConfig.

Этот интерфейс предоставляет методы #connect и #disconnect. Реализация по умолчанию — org.minbox.framework.ssh.agent.jsch.JSchAgentConnection.

Пример подключения с использованием SSH Private Key:

/**
 * Подключение к удалённому серверу с использованием SSH private key.
 * <p>
 * Локальный порт "3307" привязан к порту "3306" на удалённом сервере, что позволяет получить доступ к MySQL на удалённом сервере с локального компьютера.
 */
static void sshPrivateConnect() {
  AgentConfig config2 = new AgentConfig();
  config2.setServerIp("xxx.xxx.xxx.xxx");
  config2.setUsername("root");
  config2.setLocalPort(3307);
  config2.setForwardTargetPort(3306);
  AgentConnection connection2 = new DefaultAgentConnection(config2);
  connection2.connect();
  // После успешного подключения можно получить доступ к базе данных на локальном порту 3307, которая фактически является доступом к MySQL на порту 3306 на удалённом сервере.
}

Пример подключения с использованием имени пользователя и пароля:

/**
* Подключение к удалённому серверу с использованием имени пользователя и пароля.
* <p>
* Локальный порт "3307" привязан к порту "3306" на удалённом сервере, что позволяет получить доступ к MySQL на удалённом сервере с локального компьютера.
*/
static void usernamePasswordConnect() {
  AgentConfig config = new AgentConfig();
  config.setServerIp("xxx.xxx.xxx.xxx");
  config.setUsername("root");
  config.setPassword("пароль");
  config.setLocalPort(3307);
  config.setForwardTargetPort(3306);
  AgentConnection connection = new DefaultAgentConnection(config);
  connection.connect();
  // После успешного подключения можно получить доступ к базе данных на локальном порту 3307, которая фактически является доступом к MySQL на порту 3306 на удалённом сервере.
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/minbox-projects-ssh-agent.git
git@api.gitlife.ru:oschina-mirror/minbox-projects-ssh-agent.git
oschina-mirror
minbox-projects-ssh-agent
minbox-projects-ssh-agent
master