# ============================================================ # SSH INSTALLER (FIXED) # ============================================================ $repo = "https://git.help-d.ru/helmut/auto-turning/raw/branch/main" $temp = "$env:TEMP\ssh_setup" Write-Host "`n========== SSH УСТАНОВКА ==========`n" -ForegroundColor Cyan # ПРОВЕРКА SSH - более надёжный способ $sshService = Get-Service -Name sshd -ErrorAction SilentlyContinue $sshInstalled = $false if ($sshService) { $sshInstalled = $true Write-Host "✓ SSH служба обнаружена" -ForegroundColor Green } else { # Альтернативная проверка $sshCapability = Get-WindowsCapability -Online | Where-Object { $_.Name -like "OpenSSH.Server*" -and $_.State -eq "Installed" } if ($sshCapability) { $sshInstalled = $true Write-Host "✓ SSH компонент обнаружен" -ForegroundColor Green } else { Write-Host "! SSH не обнаружен" -ForegroundColor Yellow } } if ($sshInstalled) { Write-Host "✓ SSH уже установлен" -ForegroundColor Green # Проверка настройки sshd_config $cfg = "C:\ProgramData\ssh\sshd_config" if (Test-Path $cfg) { $configContent = Get-Content $cfg -Raw $portConfigured = $configContent -match "Port 2222" $adminMatchCommented = $configContent -match "#Match Group administrators" if ($portConfigured -and $adminMatchCommented) { Write-Host "✓ SSH уже настроен согласно скрипту" -ForegroundColor Green Write-Host " Пропускаем настройку..." -ForegroundColor Yellow $skipConfig = $true } else { Write-Host "! SSH установлен, но настроен не по шаблону" -ForegroundColor Yellow Write-Host " Выполняю настройку..." -ForegroundColor Yellow $skipConfig = $false } } else { Write-Host "! Файл конфигурации не найден" -ForegroundColor Yellow $skipConfig = $false } if (-not $skipConfig) { # Настройка авторизации Write-Host "`n3. Настраиваю авторизацию..." -ForegroundColor Yellow New-Item -ItemType Directory -Path "$env:USERPROFILE\.ssh" -Force | Out-Null "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHceolzaC/nnN14/lVqeXzcXcIANtQgJcIaFczLIchVo efgufk/admin@ISERVER" | Out-File "$env:USERPROFILE\.ssh\authorized_keys" -Force Write-Host " ✓ Готово" -ForegroundColor Green # Настройка sshd_config Write-Host "`n4. Настраиваю sshd_config..." -ForegroundColor Yellow $c = Get-Content $cfg $c = $c -replace '^Port \d+', 'Port 2222' -replace '^#Port 22', 'Port 2222' -replace '^Match Group administrators', '#Match Group administrators' -replace '^\s+AuthorizedKeysFile', '# AuthorizedKeysFile' $c | Set-Content $cfg Write-Host " ✓ Готово" -ForegroundColor Green # Перезапуск службы Write-Host "`n5. Перезапускаю службу..." -ForegroundColor Yellow Restart-Service sshd -Force Write-Host " ✓ Готово" -ForegroundColor Green } } else { # Установка SSH (как в оригинале) Write-Host "! SSH не установлен, выполняю установку..." -ForegroundColor Yellow Write-Host "`n1. Скачиваю установщик..." -ForegroundColor Yellow New-Item -ItemType Directory -Path $temp -Force | Out-Null Invoke-WebRequest -Uri "$repo/installers/OpenSSH.msi" -OutFile "$temp\OpenSSH.msi" -ErrorAction Stop Write-Host " ✓ Готово" -ForegroundColor Green Write-Host "`n2. Устанавливаю SSH..." -ForegroundColor Yellow msiexec /i "$temp\OpenSSH.msi" /quiet /norestart Start-Sleep -Seconds 3 Write-Host " ✓ Готово" -ForegroundColor Green Write-Host "`n3. Настраиваю авторизацию..." -ForegroundColor Yellow New-Item -ItemType Directory -Path "$env:USERPROFILE\.ssh" -Force | Out-Null "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHceolzaC/nnN14/lVqeXzcXcIANtQgJcIaFczLIchVo efgufk/admin@ISERVER" | Out-File "$env:USERPROFILE\.ssh\authorized_keys" -Force Write-Host " ✓ Готово" -ForegroundColor Green Write-Host "`n4. Настраиваю sshd_config..." -ForegroundColor Yellow $cfg = "C:\ProgramData\ssh\sshd_config" $c = Get-Content $cfg $c = $c -replace '^#Port 22', 'Port 2222' -replace '^Match Group administrators', '#Match Group administrators' -replace '^\s+AuthorizedKeysFile', '# AuthorizedKeysFile' $c | Set-Content $cfg Write-Host " ✓ Готово" -ForegroundColor Green Write-Host "`n5. Перезапускаю службу..." -ForegroundColor Yellow Start-Service sshd -ErrorAction SilentlyContinue Restart-Service sshd -Force Write-Host " ✓ Готово" -ForegroundColor Green } # 6. Чистка мусора Write-Host "`n6. Чистка мусора..." -ForegroundColor Yellow if (Test-Path $temp) { Remove-Item $temp -Recurse -Force Write-Host " ✓ Временные файлы удалены" -ForegroundColor Green } # Очистка временных файлов Windows try { CleanMgr /sagerun:1 2>$null Write-Host " ✓ Системный мусор очищен" -ForegroundColor Green } catch { Write-Host " ! Очистка мусора пропущена (требуется утилита CleanMgr)" -ForegroundColor Yellow } # 7. Антивирусная проверка (исправленная) Write-Host "`n7. Запуск антивирусной проверки..." -ForegroundColor Yellow try { # Проверяем статус Windows Defender $defenderStatus = Get-Service -Name WinDefend -ErrorAction SilentlyContinue if ($defenderStatus.Status -eq 'Running') { Write-Host " Запуск быстрой проверки Windows Defender..." -ForegroundColor Yellow Start-Process -FilePath "C:\Program Files\Windows Defender\MpCmdRun.exe" -ArgumentList "-Scan -ScanType 1" -NoNewWindow -Wait Write-Host " ✓ Антивирусная проверка завершена" -ForegroundColor Green } else { Write-Host " ! Служба Windows Defender не запущена" -ForegroundColor Yellow Write-Host " Возможно, используется сторонний антивирус" -ForegroundColor Yellow # Проверка наличия сторонних антивирусов $thirdPartyAV = @( @{Name="Kaspersky"; Path="C:\Program Files\Kaspersky Lab\*"; Exe="avp.com"; Args="scan"}, @{Name="ESET"; Path="C:\Program Files\ESET\*"; Exe="ecls.exe"; Args="--adware --unsafe --sfx /scan"}, @{Name="Dr.Web"; Path="C:\Program Files\DrWeb\*"; Exe="dwscancl.exe"; Args="/scan"}, @{Name="Avast"; Path="C:\Program Files\Avast Software\*"; Exe="ashCmd.exe"; Args="/quick"} ) $avFound = $false foreach ($av in $thirdPartyAV) { $avPath = Get-ChildItem -Path $av.Path -Filter $av.Exe -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1 if ($avPath) { Write-Host " Обнаружен $($av.Name), запуск проверки..." -ForegroundColor Yellow Start-Process -FilePath $avPath.FullName -ArgumentList $av.Args -NoNewWindow Write-Host " ✓ Проверка $($av.Name) запущена" -ForegroundColor Green $avFound = $true break } } if (-not $avFound) { Write-Host " ! Сторонний антивирус не обнаружен" -ForegroundColor Red Write-Host " Рекомендуется выполнить проверку вручную" -ForegroundColor Yellow } } } catch { Write-Host " ! Ошибка при запуске антивируса: $($_.Exception.Message)" -ForegroundColor Red Write-Host " Рекомендуется выполнить проверку вручную" -ForegroundColor Yellow } # Результат $ips = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -notlike "*Loopback*" -and $_.InterfaceAlias -notlike "*vEthernet*"}).IPAddress $ipList = $ips -join " " Write-Host "`n========== ГОТОВО ==========" -ForegroundColor Green Write-Host "Подключайтесь: ssh -p 2222 $env:USERNAME@$ipList" -ForegroundColor Cyan Write-Host "============================`n" -ForegroundColor Green Write-Host "✓ Установка завершена" -ForegroundColor Green Write-Host "✓ Мусор очищен" -ForegroundColor Green if ($defenderStatus.Status -eq 'Running') { Write-Host "✓ Антивирусная проверка выполнена" -ForegroundColor Green } else { Write-Host "⚠ Антивирусная проверка пропущена (служба не активна)" -ForegroundColor Yellow }