77 lines
2.9 KiB
Bash
Executable file
77 lines
2.9 KiB
Bash
Executable file
#!/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 "✅ Деплой успешно завершен!"
|