From 61aaba99a6a0c43664d6463f4255aceb9dc35a48 Mon Sep 17 00:00:00 2001 From: L_DelOff Date: Sat, 5 Aug 2023 19:34:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D0=B5=20=D0=B8=D0=B4=D1=91=D1=82=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=20=D0=B2=D1=81=D0=B5=D0=BC=20=D1=81=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 ++ .../ServerMonitorBotApplication.java | 3 ++ .../servermonitorbot/config/SshConfig.java | 21 ++++++++ .../servermonitorbot/init/SshConnect.java | 20 ++++++++ .../servermonitorbot/{ => init}/StartBot.java | 2 +- .../servermonitorbot/model/SshServer.java | 15 ++++++ .../servermonitorbot/service/SshService.java | 11 ++++ .../service/SshServiceImpl.java | 51 +++++++++++++++++++ src/main/resources/application.yml | 8 +++ 9 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java rename src/main/java/ru/ldeloff/servermonitorbot/{ => init}/StartBot.java (96%) create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/model/SshServer.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/service/SshService.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/service/SshServiceImpl.java diff --git a/pom.xml b/pom.xml index 8b2bf69..10966a9 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,11 @@ telegrambots 6.7.0 + + com.jcraft + jsch + 0.1.55 + diff --git a/src/main/java/ru/ldeloff/servermonitorbot/ServerMonitorBotApplication.java b/src/main/java/ru/ldeloff/servermonitorbot/ServerMonitorBotApplication.java index f6bd3cc..ea862b9 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/ServerMonitorBotApplication.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/ServerMonitorBotApplication.java @@ -2,8 +2,11 @@ package ru.ldeloff.servermonitorbot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import ru.ldeloff.servermonitorbot.config.SshConfig; @SpringBootApplication +@EnableConfigurationProperties(SshConfig.class) public class ServerMonitorBotApplication { public static void main(String[] args) { diff --git a/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java b/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java new file mode 100644 index 0000000..deb3255 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java @@ -0,0 +1,21 @@ +package ru.ldeloff.servermonitorbot.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import ru.ldeloff.servermonitorbot.model.SshServer; + +import java.util.List; + +@Configuration +@ConfigurationProperties(prefix = "ssh") +public class SshConfig { + private List servers; + + public List getServers() { + return servers; + } + + public void setServers(List servers) { + this.servers = servers; + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java b/src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java new file mode 100644 index 0000000..8cc1a6f --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/init/SshConnect.java @@ -0,0 +1,20 @@ +package ru.ldeloff.servermonitorbot.init; + +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; +import ru.ldeloff.servermonitorbot.service.SshService; + +@Component +public class SshConnect implements ApplicationRunner { + final SshService sshService; + + public SshConnect(SshService sshService) { + this.sshService = sshService; + } + + @Override + public void run(ApplicationArguments args) throws Exception { + sshService.ConnectToAllServer(); + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/StartBot.java b/src/main/java/ru/ldeloff/servermonitorbot/init/StartBot.java similarity index 96% rename from src/main/java/ru/ldeloff/servermonitorbot/StartBot.java rename to src/main/java/ru/ldeloff/servermonitorbot/init/StartBot.java index 53fad7e..2a9ca6c 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/StartBot.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/init/StartBot.java @@ -1,4 +1,4 @@ -package ru.ldeloff.servermonitorbot; +package ru.ldeloff.servermonitorbot.init; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/SshServer.java b/src/main/java/ru/ldeloff/servermonitorbot/model/SshServer.java new file mode 100644 index 0000000..f06f154 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/model/SshServer.java @@ -0,0 +1,15 @@ +package ru.ldeloff.servermonitorbot.model; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.stereotype.Component; + +@Setter +@Getter +@Component +public class SshServer { + private String host; + private int port; + private String user; + private String password; +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/SshService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/SshService.java new file mode 100644 index 0000000..75dac30 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/SshService.java @@ -0,0 +1,11 @@ +package ru.ldeloff.servermonitorbot.service; + +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import ru.ldeloff.servermonitorbot.model.SshServer; + + +public interface SshService { + void ConnectToAllServer(); + Session ConnectToServer(SshServer sshServer) throws JSchException; +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/SshServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/SshServiceImpl.java new file mode 100644 index 0000000..2b41c02 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/SshServiceImpl.java @@ -0,0 +1,51 @@ +package ru.ldeloff.servermonitorbot.service; + +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.Session; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.ldeloff.servermonitorbot.config.SshConfig; +import ru.ldeloff.servermonitorbot.model.SshServer; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Service +public class SshServiceImpl implements SshService{ + + private final List sshServers; + + @Autowired + public SshServiceImpl(SshConfig sshConfig) { + this.sshServers = sshConfig.getServers(); + } + + private List sessions = new ArrayList<>(); + + @Override + public void ConnectToAllServer() { + sshServers.forEach(sshServer -> { + try { + Session session = ConnectToServer(sshServer); + log.info("Успешно подключён к " + sshServer.getHost()); + sessions.add(session); + } catch (JSchException e) { + log.warn("Не удалось соединиться с " + sshServer.getHost() + ": " + e.getMessage()); + } + }); + } + + @Override + public Session ConnectToServer(SshServer sshServer) throws JSchException { + Session session = new JSch().getSession(sshServer.getUser(), + sshServer.getHost(), + sshServer.getPort()); + session.setPassword(sshServer.getPassword()); + session.setConfig("StrictHostKeyChecking", "no"); + session.connect(); + return session; + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 4529629..84ef8e2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,5 +1,13 @@ bot: name: "ServerMonitorBot" token: "token" +ssh: + servers: + - + host: "url" + port: 22 + user: "user" + password: "pass" +