hugo-builder/deploy
2025-04-23 22:41:05 +03:00

77 lines
2.9 KiB
Bash
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Парсинг аргументов командной строки
while [ $# -gt 0 ]; do
case $1 in
--ssh-host) SSH_HOST="$2"; shift 2 ;;
--ssh-port) SSH_PORT="$2"; shift 2 ;;
--ssh-user) SSH_USER="$2"; shift 2 ;;
--deploy-path) DEPLOY_PATH="$2"; shift 2 ;;
--private-key) USER_PRIVATE_KEY="$2"; shift 2 ;;
*) echo "❌ Ошибка: Неизвестный параметр: $1"; exit 1 ;;
esac
done
# Функция для проверки наличия аргумента
check_arg() {
arg_name="$1"
arg_value="$2"
if [ -z "$arg_value" ]; then
echo "❌ Ошибка: Не указан обязательный параметр --$arg_name"
exit 1
fi
}
# Проверка каждого аргумента отдельно
check_arg "ssh-host" "$SSH_HOST"
check_arg "ssh-user" "$SSH_USER"
check_arg "deploy-path" "$DEPLOY_PATH"
check_arg "private-key" "$USER_PRIVATE_KEY"
# Проверка формата SSH-порта (если указан)
if [ -n "$SSH_PORT" ]; then
if ! echo "$SSH_PORT" | grep -Eq '^[0-9]+$' || [ "$SSH_PORT" -lt 1 ] || [ "$SSH_PORT" -gt 65535 ]; then
echo "❌ Ошибка: Порт должен быть числом от 1 до 65535"
exit 1
fi
else
SSH_PORT=22 # Значение по умолчанию
fi
# Проверка формата приватного ключа
if ! echo "$USER_PRIVATE_KEY" | grep -q "PRIVATE KEY"; then
echo "❌ Ошибка: Указанный приватный ключ не содержит 'PRIVATE KEY' (возможно, некорректный формат)"
exit 1
fi
# Создаем папку .ssh, если её нет
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Сохраняем приватный ключ
echo "$USER_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
# Добавляем хост в known_hosts
echo "🔑 Добавляем $SSH_HOST в known_hosts..."
ssh-keyscan -p "$SSH_PORT" -H "$SSH_HOST" > ~/.ssh/known_hosts 2>/dev/null || {
echo "❌ Ошибка: Не удалось добавить хост $SSH_HOST в known_hosts"
exit 1
}
# Запускаем ssh-agent и добавляем ключ
echo "🔐 Запускаем ssh-agent..."
eval "$(ssh-agent -s)" >/dev/null
ssh-add ~/.ssh/id_rsa 2>/dev/null || {
echo "❌ Ошибка: Не удалось добавить SSH-ключ в агент (проверьте ключ и пароль)"
exit 1
}
# Деплой через rsync
echo "🚀 Начинаем деплой в $SSH_USER@$SSH_HOST:$DEPLOY_PATH..."
rsync -avz --progress -e "ssh -p $SSH_PORT -i ~/.ssh/id_rsa" public/ "$SSH_USER@$SSH_HOST:$DEPLOY_PATH" || {
echo "❌ Ошибка: Деплой не удался (проверьте путь, права или подключение)"
exit 1
}
echo "✅ Деплой успешно завершен!"