51 lines
2.3 KiB
JavaScript
51 lines
2.3 KiB
JavaScript
const { execSshCommand } = require('./sshUtils');
|
||
const log = require('./logger');
|
||
|
||
/**
|
||
* Создание пользователя с SSH ключами
|
||
*/
|
||
const createUserWithSshKeys = async (username, publicKey, options) => {
|
||
log.info(`Создание пользователя ${username}...`);
|
||
|
||
// Создание пользователя
|
||
await execSshCommand(`useradd -m -s /bin/bash ${username} || true`, options);
|
||
await execSshCommand(`usermod -aG sudo ${username}`, options);
|
||
|
||
// Настройка SSH ключей для пользователя
|
||
await execSshCommand(`mkdir -p /home/${username}/.ssh`, options);
|
||
// Используем printf для безопасной обработки специальных символов в ключе
|
||
// Экранируем обратные слеши и знаки доллара в публичном ключе
|
||
const escapedPublicKey = publicKey.replace(/\\/g, '\\\\').replace(/\$/g, '\\$');
|
||
await execSshCommand(`printf '%s\\n' "${escapedPublicKey}" > /home/${username}/.ssh/authorized_keys`, options);
|
||
await execSshCommand(`chown -R ${username}:${username} /home/${username}/.ssh`, options);
|
||
await execSshCommand(`chmod 700 /home/${username}/.ssh`, options);
|
||
await execSshCommand(`chmod 600 /home/${username}/.ssh/authorized_keys`, options);
|
||
|
||
log.success(`Пользователь ${username} создан с SSH ключами`);
|
||
};
|
||
|
||
/**
|
||
* Создание всех необходимых пользователей
|
||
*/
|
||
const createAllUsers = async (ubuntuUser, dockerUser, publicKey, options) => {
|
||
// Создание пользователя Ubuntu
|
||
await createUserWithSshKeys(ubuntuUser, publicKey, options);
|
||
|
||
// Создание пользователя Docker
|
||
await createUserWithSshKeys(dockerUser, publicKey, options);
|
||
|
||
// Добавление пользователя Docker в группу docker
|
||
await execSshCommand(`usermod -aG docker ${dockerUser}`, options);
|
||
|
||
// Создание директории для приложения
|
||
await execSshCommand(`mkdir -p /home/${dockerUser}/dapp`, options);
|
||
await execSshCommand(`chown ${dockerUser}:${dockerUser} /home/${dockerUser}/dapp`, options);
|
||
|
||
log.success('Все пользователи созданы');
|
||
};
|
||
|
||
module.exports = {
|
||
createUserWithSshKeys,
|
||
createAllUsers
|
||
};
|