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" +