ssh! и документы
This commit is contained in:
@@ -10,7 +10,9 @@ const transporter = nodemailer.createTransport({
|
||||
secure: false, // true для 465, false для других портов
|
||||
auth: {
|
||||
user: process.env.SMTP_USER,
|
||||
pass: process.env.SMTP_PASS
|
||||
pass: (process.env.SMTP_PASS && process.env.SMTP_PASS.startsWith('"') && process.env.SMTP_PASS.endsWith('"'))
|
||||
? process.env.SMTP_PASS.slice(1, -1)
|
||||
: process.env.SMTP_PASS
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Server as SocketIOServer } from 'socket.io';
|
||||
import { Server as SocketIOServer, Socket } from 'socket.io';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import { getContainerStats } from './proxmoxApi';
|
||||
import { sendResourceAlertEmail } from '../notification/email.service';
|
||||
@@ -16,7 +16,7 @@ export class MonitoringService {
|
||||
}
|
||||
|
||||
private setupSocketHandlers() {
|
||||
this.io.on('connection', (socket) => {
|
||||
this.io.on('connection', (socket: Socket) => {
|
||||
console.log(`Client connected: ${socket.id}`);
|
||||
|
||||
// Подписка на обновления конкретного сервера
|
||||
|
||||
@@ -17,14 +17,26 @@ export function setupConsoleWSS(server: HttpServer) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Получаем IP и root-пароль из БД (упрощённо)
|
||||
// Здесь можно добавить реальный запрос к Prisma
|
||||
const host = process.env.PROXMOX_IP || process.env.PROXMOX_NODE;
|
||||
const username = 'root';
|
||||
const password = process.env.PROXMOX_ROOT_PASSWORD;
|
||||
|
||||
// Получаем параметры SSH из .env
|
||||
const host = process.env.SSH_HOST || process.env.PROXMOX_IP || process.env.PROXMOX_NODE;
|
||||
const port = process.env.SSH_PORT ? Number(process.env.SSH_PORT) : (process.env.PROXMOX_SSH_PORT ? Number(process.env.PROXMOX_SSH_PORT) : 22);
|
||||
const username = process.env.SSH_USER || 'root';
|
||||
let password = process.env.SSH_PASSWORD || process.env.PROXMOX_ROOT_PASSWORD;
|
||||
if (password && password.startsWith('"') && password.endsWith('"')) {
|
||||
password = password.slice(1, -1);
|
||||
}
|
||||
const privateKeyPath = process.env.SSH_PRIVATE_KEY_PATH;
|
||||
let privateKey: Buffer | undefined = undefined;
|
||||
if (privateKeyPath) {
|
||||
try {
|
||||
privateKey = require('fs').readFileSync(privateKeyPath);
|
||||
} catch (e) {
|
||||
console.error('Ошибка чтения SSH ключа:', e);
|
||||
}
|
||||
}
|
||||
|
||||
const ssh = new SSHClient();
|
||||
const port = process.env.PROXMOX_SSH_PORT ? Number(process.env.PROXMOX_SSH_PORT) : 22;
|
||||
ssh.on('ready', () => {
|
||||
ssh.shell((err: Error | undefined, stream: any) => {
|
||||
if (err) {
|
||||
@@ -48,7 +60,8 @@ export function setupConsoleWSS(server: HttpServer) {
|
||||
host,
|
||||
port,
|
||||
username,
|
||||
password,
|
||||
password: privateKey ? undefined : password,
|
||||
privateKey,
|
||||
hostVerifier: (hash: string) => {
|
||||
console.log('SSH fingerprint:', hash);
|
||||
return true; // всегда принимаем fingerprint
|
||||
|
||||
Reference in New Issue
Block a user