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