Claude Code
- Installation Claude Code
- Снятие лимита RDP-подключений в Windows Server 2025
- Глобальная настройка Claude Code на Windows Server
- Настройка алиаса для команды Claude
- Claude Code на linux-сервере
- Skills
Installation Claude Code
- Установить Node.js https://nodejs.org/en/download
- Установить через терминал https://code.claude.com/docs/en/overview
- Установить редактор кода, например VS https://code.visualstudio.com/
Снятие лимита RDP-подключений в Windows Server 2025
Развертывание терминального сервера Windows Server 2025 без домена (Grace Period 120 дней)
Эта инструкция описывает настройку одиночного сервера (Workgroup) для одновременной работы нескольких пользователей. Установка через "Quick Start" требует наличия домена (Active Directory), поэтому мы используем установку по ролям, чтобы обойти это ограничение.
Шаг 1: Установка ролей через Server Manager
Этот шаг превращает сервер в хост для удаленных сессий и устанавливает службу лицензирования для активации пробного периода.
-
Откройте Server Manager.
-
В правом верхнем углу нажмите Manage и выберите Add Roles and Features.
-
Нажмите Next на стартовом экране.
-
В разделе Installation Type выберите Role-based or feature-based installation (это критически важно для работы без домена) и нажмите Next.
-
В разделе Server Selection убедитесь, что выбран ваш сервер, и нажмите Next.
-
В разделе Server Roles найдите в списке Remote Desktop Services и поставьте галочку. Нажмите Next.
-
Пропустите раздел Features, просто нажав Next дважды, пока не дойдете до Role Services.
-
В разделе Role Services отметьте две службы:
-
Remote Desktop Session Host
-
Remote Desktop Licensing
-
(Если появится всплывающее окно с предложением добавить компоненты — нажимайте Add Features).
-
-
Нажмите Next, затем Install.
-
Дождитесь окончания установки и обязательно перезагрузите сервер.
Шаг 2: Настройка правил через Group Policy Editor
После перезагрузки сервер нужно перевести в режим 120-дневного пробного периода и снять лимит на подключения. Все настройки выполняются в английском интерфейсе.
-
Нажмите
Win + R, введитеgpedit.mscи нажмите Enter. -
В левом меню перейдите по пути:
Computer Configuration->Administrative Templates->Windows Components->Remote Desktop Services->Remote Desktop Session Host.
Настройка лимита сессий:
-
Откройте папку Connections.
-
Дважды кликните на Limit number of connections. Установите значение Enabled, а в поле "RD Maximum Connections allowed" введите
999999(или любое нужное число). Нажмите OK. -
(Если нужно, что бы под одним юзером были несколько сессий) Дважды кликните на Restrict Remote Desktop Services users to a single Remote Desktop Services session. Установите Disabled и нажмите OK.
Настройка сервера лицензирования (Grace Period):
-
В левом меню перейдите в папку Licensing (находится рядом с Connections).
-
Откройте Use the specified Remote Desktop license servers. Установите Enabled и в поле "License servers to use" впишите
127.0.0.1. Нажмите OK. -
Откройте Set the Remote Desktop licensing mode. Установите Enabled и в выпадающем списке выберите Per User. Нажмите OK.
Шаг 3: Создание пользователей и выдача прав
Для обеспечения отдельной авторизации и изоляции рабочих сред каждого сотрудника необходимо создать локальные учетные записи.
-
Нажмите
Win + Xи выберите Computer Management. -
В левом меню разверните Local Users and Groups и выберите папку Users.
-
Нажмите правой кнопкой мыши в пустом месте по центру и выберите New User.
-
Заполните поля User name и Password для каждого сотрудника. Снимите галочку "User must change password at next logon" и поставьте "Password never expires" (по желанию). Создайте нужное количество пользователей.
-
Перейдите в папку Groups (слева).
-
Найдите в списке группу Remote Desktop Users и кликните по ней дважды.
-
Нажмите кнопку Add, введите имена созданных пользователей (можно через точку с запятой) и нажмите Check Names, затем OK.
Шаг 4: Применение изменений и проверка
-
Чтобы заставить сервер сразу применить новые политики без перезагрузки, нажмите
Win + X-> Terminal (Admin) или Command Prompt (Admin). -
Введите команду обновления политик:
gpupdate /force -
Нажмите Enter и дождитесь сообщения об успешном выполнении.
-
Откройте поиск Windows, введите RD Licensing Diagnoser и запустите утилиту. В окне должно быть указано, что сервер лицензирования доступен, а текущий режим — Grace Period (120 дней).
Глобальная настройка Claude Code на Windows Server
Ниже приведена полная и окончательная инструкция по развертыванию Claude Code на Windows Server 2025. Она объединяет весь наш опыт решения проблем с правами доступа (EPERM), путями Git Bash и системными переменными, гарантируя, что авторизация будет доступна всем пользователям системы.
Руководство по глобальной настройке Claude Code (Multi-User)
По умолчанию Claude Code устанавливается в личный профиль пользователя и хранит авторизацию там же. Чтобы сделать программу и аккаунт общими для всех пользователей (например, для администратора и пользователя David), мы переносим исполняемые файлы и конфигурацию в общую системную директорию C:\ProgramData и настраиваем соответствующие права доступа.
Архитектура решения
-
Исполняемые файлы: Переносятся в
C:\ProgramData\npm. -
Сессия и авторизация: Переносятся в
C:\ProgramData\claude-code. -
Связующее звено: Системные переменные
PATH,CLAUDE_CONFIG_DIRиCLAUDE_CODE_GIT_BASH_PATHна уровне машины (Machine).
Вариант 1: Автоматическая настройка (Рекомендуется)
Этот .bat файл самостоятельно найдет (или установит) Git, создаст нужные папки, выдаст права и пропишет системные пути. Кодировка исправлена для корректного отображения кириллицы.
-
Создайте на рабочем столе файл
setup_claude_global.bat. -
Скопируйте в него код ниже.
-
Нажмите на файл правой кнопкой мыши и выберите «Запуск от имени администратора».
@echo off
:: Set encoding for correct display of English text
chcp 866 >nul
setlocal enabledelayedexpansion
title Claude Code Global Setup
echo ========================================================
echo Claude Code: Global Setup (Multi-User)
echo ========================================================
:: 1. Check for administrator rights
net session >nul 2>&1
if %errorLevel% neq 0 (
echo [ERROR] Run this file AS ADMINISTRATOR.
pause
exit /b
)
:: 2. Search for or install Git Bash (FIXED LOGIC)
set "BASH_PATH="
if exist "C:\Program Files\Git\bin\bash.exe" (
set "BASH_PATH=C:\Program Files\Git\bin\bash.exe"
)
if "!BASH_PATH!"=="" (
if exist "C:\Program Files (x86)\Git\bin\bash.exe" (
set "BASH_PATH=C:\Program Files (x86)\Git\bin\bash.exe"
)
)
if "!BASH_PATH!"=="" (
echo [STATUS] Git Bash not found. Starting installation via winget...
winget install --id Git.Git -e --source winget --accept-source-agreements --accept-package-agreements
set "BASH_PATH=C:\Program Files\Git\bin\bash.exe"
)
echo [STATUS] Git Bash path set to: !BASH_PATH!
:: 3. Configure shared folders
set "NPM_GLOBAL=C:\ProgramData\npm"
set "CLAUDE_CONFIG=C:\ProgramData\claude-code"
if not exist "%NPM_GLOBAL%" mkdir "%NPM_GLOBAL%"
if not exist "%CLAUDE_CONFIG%" mkdir "%CLAUDE_CONFIG%"
:: 4. Configure access permissions (icacls)
echo [STATUS] Setting access permissions for the Users group...
icacls "%NPM_GLOBAL%" /grant Users:(OI)(CI)M /T /C /Q >nul
icacls "%CLAUDE_CONFIG%" /grant Users:(OI)(CI)M /T /C /Q >nul
:: 5. System variables (Machine level)
setx CLAUDE_CONFIG_DIR "%CLAUDE_CONFIG%" /M >nul
setx CLAUDE_CODE_GIT_BASH_PATH "!BASH_PATH!" /M >nul
:: 6. Move NPM and install Claude
call npm config set prefix "%NPM_GLOBAL%" --global >nul
echo [STATUS] Installing Claude Code (please wait)...
call npm install -g @anthropic-ai/claude-code >nul
:: 7. Update system PATH
set "NEW_PATH=%NPM_GLOBAL%"
echo %PATH% | findstr /I /C:"%NEW_PATH%" >nul
if %errorlevel% neq 0 (
setx /M PATH "%PATH%;%NEW_PATH%" >nul
)
echo.
echo ========================================================
echo INSTALLATION COMPLETED SUCCESSFULLY!
echo ========================================================
echo Restart the terminal and enter 'claude auth'.
pause
Вариант 2: Ручная настройка (PowerShell)
Если вы хотите выполнить все шаги вручную, откройте PowerShell от имени Администратора:
Шаг 1: Подготовка папок и прав
$dirs = @("C:\ProgramData\npm", "C:\ProgramData\claude-code")
foreach ($dir in $dirs) {
if (!(Test-Path $dir)) { New-Item -ItemType Directory -Path $dir }
$acl = Get-Acl $dir
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users", "Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-Acl $dir $acl
}
Шаг 2: Настройка системных переменных
[Environment]::SetEnvironmentVariable("CLAUDE_CONFIG_DIR", "C:\ProgramData\claude-code", "Machine")
[Environment]::SetEnvironmentVariable("CLAUDE_CODE_GIT_BASH_PATH", "C:\Program Files\Git\bin\bash.exe", "Machine")
$oldPath = [Environment]::GetEnvironmentVariable("Path", "Machine")
if ($oldPath -notlike "*C:\ProgramData\npm*") {
[Environment]::SetEnvironmentVariable("Path", "$oldPath;C:\ProgramData\npm", "Machine")
}
Шаг 3: Установка программы
npm config set prefix "C:\ProgramData\npm" --global
npm install -g @anthropic-ai/claude-code
Финальный шаг: Первичная авторизация
Независимо от выбранного метода установки, после его завершения:
-
Откройте новое окно терминала.
-
Введите
claude auth. -
Пройдите процесс авторизации в браузере. Файл сессии сохранится в общую папку.
Инструкция для пользователей (например, David)
Для любого пользователя сервера процесс теперь максимально прост:
-
Пользователь заходит в свою учетную запись.
-
Открывает терминал (PowerShell, CMD или терминал в IDE).
-
Вводит
claude. -
Программа запускается сразу под вашим аккаунтом.
Руководство по решению проблем (Troubleshooting)
| Симптом | Причина | Решение |
Ошибка: Command 'claude' not found у нового пользователя. |
Windows еще не обновила системный PATH для текущей сессии пользователя. |
Пользователю нужно выйти из системы (Log off) и зайти снова, либо перезагрузить сервер. |
Ошибка: EPERM: operation not permitted при запуске claude. |
Программа все еще пытается получить доступ к папке AppData администратора. |
Убедитесь, что шаг с npm config set prefix "C:\ProgramData\npm" --global был выполнен, и переустановите Claude. |
Ошибка: Unable to find CLAUDE_CODE_GIT_BASH_PATH. |
Неверный путь к bash.exe или Git не установлен. |
Проверьте фактическое расположение файла bash.exe и обновите системную переменную CLAUDE_CODE_GIT_BASH_PATH. |
Требует claude auth у второго пользователя. |
Переменная CLAUDE_CONFIG_DIR установлена как "User", а не "Machine". |
Запустите PowerShell от администратора и выполните команду из Шага 2 ручной настройки. |
Безопасное обновление Claude Code
Поскольку программа теперь находится в общей системной папке, обновлять ее должен только Администратор.
В терминале от имени Администратора введите:
npm install -g @anthropic-ai/claude-code@latest
Ваши ключи авторизации не пострадают, а новые файлы автоматически унаследуют права доступа для всех пользователей.
Настройка алиаса для команды Claude
Чтобы сделать алиас claude-skip на Windows для всех пользователей, выполните эти 2 шага в PowerShell от имени Администратора:
1. Создайте команду
Запустите этот код, чтобы создать системный батник (он будет работать везде: в CMD, PowerShell и IDE):
"@echo off`nclaude --dangerously-skip-permissions %*" | Out-File -FilePath "$env:SystemRoot\claude-skip.bat" -Encoding ASCII
2. Проверьте результат
Откройте любое новое окно терминала и введите:
claude-skip --version
Готово! Теперь вместо длинной команды просто пишите claude-skip.
Claude Code на linux-сервере
SSH-подключение
Подключение
Host: 62.84.181.155 или 22.claude.fitnessmama.md
Вход по паролю: ssh <username>@<host>
Пример:
ssh olesya@62.84.181.155
Создание ssh-ключа
Примечание: в примерах имя ключа - claude_key. Если вы назовёте ключ иначе, не забудьте учесть это в тех командах, где встречается "claude_key" или "claude_key.pub"
Windows
- Запускаем Powershell от имени администратора.
- Создаём папку для ключей:
if (!(Test-Path $env:USERPROFILE\.ssh)) {
Write-Host "Папка .ssh не найдена — создаём её..." -ForegroundColor Yellow
New-Item -ItemType Directory -Path $env:USERPROFILE\.ssh
Write-Host "Папка .ssh создана" -ForegroundColor Green
} else {
Write-Host "Папка .ssh уже существует" -ForegroundColor Green
}
- Создаём SSH-ключ:
$keyPath = "$env:USERPROFILE\.ssh\claude_key"
if (!(Test-Path $keyPath)) {
Write-Host "Создаём новый SSH-ключ..." -ForegroundColor Yellow
ssh-keygen -t ed25519 -f $keyPath -N ""
Write-Host "SSH-ключ создан!" -ForegroundColor Green
} else {
Write-Host "SSH-ключ уже существует: $keyPath" -ForegroundColor Green
}
В директории C:\Users\<ваш юзернейм>\.ssh появятся файлы claude_key и claude_key.pub
MacOS/Linux
- Открываем терминал.
- Создаем папку для ключей:
SSH_DIR="$HOME/.ssh"
if [ ! -d "$SSH_DIR" ]; then
echo "Папка .ssh не найдена — создаём её..."
mkdir -p "$SSH_DIR"
chmod 700 "$SSH_DIR"
echo "Папка .ssh создана"
else
echo "Папка .ssh уже существует"
fi
- Создаем SSH-ключ:
KEY_PATH="$HOME/.ssh/claude_key"
if [ ! -f "$KEY_PATH" ]; then
echo "Создаём новый SSH-ключ..."
ssh-keygen -t ed25519 -f "$KEY_PATH"
echo "SSH-ключ создан!"
else
echo "SSH-ключ уже существует: $KEY_PATH"
fi
В директории /home/<ваш юзернейм>/.ssh появятся файлы claude_key и claude_key.pub
Копирование публичного ключа на сервер
Windows
У себя на компьютере в Powershell:
type $env:USERPROFILE\.ssh\claude_key.pub | ssh <user>@62.84.181.155 "cat >> ~/.ssh/authorized_keys"
MacOS/Linux
В терминале:
cat ~/.ssh/claude_key.pub | ssh <user>@62.84.181.155 "cat >> ~/.ssh/authorized_keys"
Настройка удобного алиаса
Windows
В Powershell от имени администратора:
# Путь к SSH-директории и config
$sshDir = "$env:USERPROFILE\.ssh"
$configPath = "$sshDir\config"
if (!(Test-Path $sshDir)) {
New-Item -ItemType Directory -Path $sshDir | Out-Null
}
if (!(Test-Path $configPath)) {
New-Item -ItemType File -Path $configPath | Out-Null
}
# Блок для добавления (ЗАМЕНИ <username>)
$block = @"
Host claude
HostName 22.claude.fitnessmama.md
User <username>
IdentityFile ~/.ssh/claude_key
IdentitiesOnly yes
"@
$content = Get-Content $configPath -Raw
if ($content -notmatch "Host claude") {
Add-Content -Path $configPath -Value "`n$block"
Write-Host "Конфигурация добавлена"
} else {
Write-Host "Host claude уже есть в config"
}
icacls $configPath /inheritance:r | Out-Null
icacls $configPath /grant:r "$($env:USERNAME):(R,W)" | Out-Null
MacOS/Linux
В терминале:
# Путь
SSH_DIR="$HOME/.ssh"
CONFIG_FILE="$SSH_DIR/config"
mkdir -p "$SSH_DIR"
chmod 700 "$SSH_DIR"
touch "$CONFIG_FILE"
chmod 600 "$CONFIG_FILE"
# Добавляем блок (ЗАМЕНИ <username>)
if ! grep -q "Host claude" "$CONFIG_FILE"; then
cat >> "$CONFIG_FILE" <<EOF
Host claude
HostName 22.claude.fitnessmama.md
User <username>
IdentityFile ~/.ssh/claude_key
IdentitiesOnly yes
EOF
echo "Конфигурация добавлена"
else
echo "Host claude уже есть в config"
fi
После создания такого конфига можно не писать ssh <username>@<host> или scp <username>@<host>.
Достаточно ssh claude или scp claude. Пароль так же не будет нужен, если не выполняете команды на сервере с sudo
Синхронизация Syncthing
Skills
Skill - Вставить всплывающий виджет GetCourse на лендинг
---
description: Вставить всплывающий виджет GetCourse на лендинг. Передай скрипт(ы) виджета и укажи, какая кнопка должна его открывать.
---
## Что такое виджет GetCourse
Виджет GetCourse — это тег `<script>` с двумя ключевыми атрибутами:
- `id` — уникальный хеш, по которому платформа идентифицирует точку вставки
- `src` — URL вида `https://fitnessmama.school/pl/lite/widget/script?id=XXXXXXX`
Скрипт рендерит форму регистрации/оплаты прямо рядом с собой в DOM.
## Твоя задача
Пользователь предоставил один или несколько скриптов виджетов GetCourse и указал, какие кнопки должны их открывать.
Выполни следующие шаги:
### 1. Прочитай файл лендинга
Прочитай целевой HTML-файл, чтобы понять:
- Где находится закрывающий тег `</style>`
- Какие кнопки нужно связать с виджетами (их текст, классы, текущий `href`)
- Есть ли уже существующие модальные окна или скрипты виджетов
### 2. Добавь CSS модальных окон
Вставь перед `</style>` следующие стили (адаптируй border-radius и цвета под дизайн страницы):
```css
/* ===== GETCOURSE WIDGET MODALS ===== */
.gc-modal-overlay {
display: none;
position: fixed;
inset: 0;
background: rgba(0,0,0,0.6);
backdrop-filter: blur(4px);
z-index: 9999;
align-items: center;
justify-content: center;
}
.gc-modal-overlay.active {
display: flex;
}
.gc-modal {
background: #fff;
border-radius: 16px;
width: 100%;
max-width: 500px;
margin: 16px;
overflow: hidden;
position: relative;
}
.gc-modal-close {
position: absolute;
top: 12px;
right: 16px;
font-size: 28px;
cursor: pointer;
color: #666;
background: none;
border: none;
line-height: 1;
z-index: 1;
}
.gc-modal-close:hover {
color: #222;
}
.gc-modal-body {
padding: 8px;
}
```
### 3. Добавь HTML модальных окон и JavaScript
Вставь перед `</body>`. Для каждого виджета создай отдельный оверлей.
Именуй id как `gc-modal-[тип]`, например `gc-modal-free`, `gc-modal-vip`.
Скрипт виджета помести внутрь `.gc-modal-body`.
Шаблон для одного виджета:
```html
<!-- Modal [тип] -->
<div class="gc-modal-overlay" id="gc-modal-[тип]">
<div class="gc-modal">
<button class="gc-modal-close" onclick="gcCloseModal('[тип]')">×</button>
<div class="gc-modal-body">
<script id="[ID_ВИДЖЕТА]" src="[SRC_ВИДЖЕТА]"></script>
</div>
</div>
</div>
```
После всех модалок добавь единый блок JavaScript:
```html
<script>
function gcOpenModal(type) {
document.getElementById('gc-modal-' + type).classList.add('active');
document.body.style.overflow = 'hidden';
}
function gcCloseModal(type) {
document.getElementById('gc-modal-' + type).classList.remove('active');
document.body.style.overflow = '';
}
// Закрытие по клику на фон оверлея
document.querySelectorAll('.gc-modal-overlay').forEach(function(overlay) {
overlay.addEventListener('click', function(e) {
if (e.target === overlay) {
overlay.classList.remove('active');
document.body.style.overflow = '';
}
});
});
// Закрытие по клавише Escape
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
document.querySelectorAll('.gc-modal-overlay.active').forEach(function(m) {
m.classList.remove('active');
});
document.body.style.overflow = '';
}
});
</script>
```
### 4. Измени кнопки
Для каждой кнопки, которую нужно связать с виджетом:
- Замени `href="#"` на `href="javascript:void(0)"`
- Добавь `onclick="gcOpenModal('[тип]')"`
Пример:
```html
<!-- До -->
<a href="#" class="btn-primary">Купить</a>
<!-- После -->
<a href="javascript:void(0)" class="btn-primary" onclick="gcOpenModal('vip')">Купить</a>
```
### 5. Проверь результат
Сообщи пользователю:
- Какие кнопки были изменены
- Какие модальные окна созданы (id каждого)
- Как протестировать: открыть файл в браузере, нажать кнопки, проверить закрытие через ×, клик на фон, Escape
## Важные правила
- **Не дублируй** скрипты виджетов — каждый `id` виджета должен встречаться в DOM только один раз
- Если на странице уже есть своя модальная система, **используй её стили** вместо gc-modal-*
- Если пользователь указал несколько виджетов (Free, VIP и т.д.) — создай отдельный оверлей для каждого
- Если кнопка уже ссылается на `#tariffs` или другой якорь (прокрутка к секции) — **не трогай её**, только кнопки самой оплаты/регистрации