47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
|
|
import { NodeSSH } from 'node-ssh';
|
||
|
|
// Обратите внимание на .js в конце. Это обязательно для ESM!
|
||
|
|
import { config } from './config.js';
|
||
|
|
import type { ServerSettings } from './config.js';
|
||
|
|
|
||
|
|
const ssh = new NodeSSH();
|
||
|
|
|
||
|
|
async function processServer(server: ServerSettings) {
|
||
|
|
console.log(`\n>>> Начинаю работу с сервером: ${server.host}:${server.port}`);
|
||
|
|
|
||
|
|
try {
|
||
|
|
await ssh.connect({
|
||
|
|
host: server.host,
|
||
|
|
port: server.port,
|
||
|
|
username: server.username,
|
||
|
|
password: server.password
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log(`[${server.host}] Соединение установлено.`);
|
||
|
|
|
||
|
|
const commands = [
|
||
|
|
'sudo apt-get update',
|
||
|
|
'sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y'
|
||
|
|
];
|
||
|
|
|
||
|
|
for (const cmd of commands) {
|
||
|
|
console.log(`[${server.host}] Выполняю: ${cmd}`);
|
||
|
|
await ssh.execCommand(cmd, {
|
||
|
|
onStdout(chunk) { process.stdout.write(chunk.toString()); },
|
||
|
|
onStderr(chunk) { process.stderr.write(chunk.toString()); }
|
||
|
|
});
|
||
|
|
}
|
||
|
|
console.log(`[${server.host}] ✅ Готово.`);
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error(`[${server.host}] ❌ Ошибка: ${error.message}`);
|
||
|
|
} finally {
|
||
|
|
ssh.dispose();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
async function run() {
|
||
|
|
for (const server of config) {
|
||
|
|
await processServer(server);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
run();
|