Перейти к содержимому

YoBit.Net





* * * * * 2 голосов

Powershell cкрипт для массовой смены алгоритма майнинга на множестве машин в рабочей группе.

Написано disodium, 07 March 2017 · 1493 Просмотров

powershell скрипт майнинг
Вашему вниманию представляется Powershell скрипт, который позволяет при помощи GUI переключать майнинг на другую монету на множестве ферм одновременно. Инструкция по настройке, которая проста и сводится к запуску определенного батника на удаленной машине, находится ниже, однако для начала рекомендуется почитать часть теоретическую, чтобы понимать, с какими проблемами приходится сталкиваться при настройке удаленного доступа, какие компромиссы в безопасности при этом возникают и какие существуют возможные решения этих проблем, чтобы выбрать оптимальный вариант настройки для себя. Расписал все подробно, чтобы было понятно широким массам.

Прикрепленное изображение

Немного теории.

В Windows существует два типа сетей: домен и рабочая группа. Доменная сеть предназначена для администрирования большого числа юзеров, для этого она имеет выделенный сервер, на котором хранятся учетные записи пользователей, и юзер может заходить под своим логином на любой машине домена. В доменах Windows по умолчанию используются продвинутые алгоритмы авторизации, исключающие прямую передачу пароля.

В рабочей группе аккаунты пользователя хранятся локально, на самой машине, а начиная c Vista в Windows присутствует механизм контроля за правами пользователя — UAC (User Account Control).

Если мы попытаемся, например, перегрузить удаленную машину в рабочей группе командами:
net use \\Computer-1\IPC$ pass123 /user:Vasia
shutdown /r /m \\Computer-1
мы получим ошибку 5: Access is Denied, несмотря не то, что синтаксис команд верный. То же самое случится и при попытке выполнить другие задачи удаленного администрирования, запуск или остановка процессов, удаленное использование планировщика и т.п. Почему так происходит?

Во-первых, даже если у вас аккаунт администратора, с точки зрения системы вы не совсем полноценный администратор. Вы всего лишь юзер, наделенный правами администратора, причем лишь некоторыми, не всеми. Настоящий администратор, который обладает правом делать все, что угодно, в системе только один, и это не тот аккаунт, который вы завели при инсталляции, а специальный встроенный аккаунт администратора, который в Windows заблокирован по умолчанию. Поэтому при каком-либо «серьезном» с точки зрения системы действии вы должны вручную повышать свои права и выполнять эти действия «от имени администратора». От того самого, встроенного. Именно этим и занят UAC.

Аналогичная ситуация возникает, когда вы заходите на компьютер удаленно. По умолчанию UAC настроен так, что не выдает полные админские права удаленному юзеру. Даже если аккаунт Vasia/pass123 cуществует на этой машине, даже если он администратор, и вы без проблем им пользуетесь локально, при попытке выполнить критические действия удаленно с этими же логином и паролем вы получите отказ в доступе. Это разумная мера с точки зрения безопасности, но как же все-таки обойти это ограничение и получить доступ, когда он нужен?

Есть только две стратегии: либо повысить свои права до «настоящего» администратора, т.е. активировать встроенный аккаунт администратора и заходить удаленно из-под него, либо отключить дискриминацию удаленных администраторов в реестре. Обе стратегии так или иначе компромиссны с точки зрения безопасности.

Способ 1. Активируем встроенный аккаунт администратора.

Включаем аккаунт админа следующей коммандой:
net user administrator /active:yes
Задаем ему пароль:
net user administrator p@ssw0rd123
И, что крайне желательно, хотя и необязательно, переименовываем:
wmic useraccount where name='Administrator' rename 'Новое_Имя'
Если вы уже когда-либо включали и переименовывали встроенную учетную запись админа, а потом отключили, то надо просто активировать её под тем именем, под которым она «спит»:
net user Имя_Аккаунта_Администратора /active:yes
Теперь у нас в системе два аккаунта, майнер работает под первым, как и прежде, а когда возникает необходимость в удаленных операциях, мы совершаем их от имени встроенного администратора, обходя таким образом ограничения UAC.

Способ подобен рутовке телефона, но на Windows предельно прост в настройке и эффективно решает любые проблемы с удаленным доступом, однако вызывает неодобрение специалистов по безопасности, так как предоставляет абсолютно полный доступ к удаленной машине и поэтому является потенциальной мишенью для хакеров и зловредов. Традиционно рекомендуют пользоваться им как средством последней инстанции, если ничто другое не работает.

Способ 2. Отключаем дискриминацию удаленных аккаунтов администратора.

Для этого достаточно изменить реестр следующей командой и перегрузить компьютер:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
Совершив это действие мы открываем целый ряд дыр в безопасности удаленного компьютера. Самое неприятное последствие заключается в том, что если на нескольких машинах в рабочей группе используется одинаковый логин и пароль, то Windows кэширует эти данные и с одной такой машины открывается доступ ко всем остальным. Т.е. если у вас все фермы работают от юзера Vasia/pass123, то хакер, получивший доступ к одной такой машине, или вирус, случайно занесенный с флешки, имеет возможность на любой другой машине, например, зайти через административные шары \\Имя_Сервера\C$ на диск C:\ и удалить с него данные, и Windows даже не спросит пароль для этой операции.

Если мы сами отключили слой безопасности, нам придется затыкать дыры вручную. Рекомендованный способ для решения этой проблемы — создать еще один аккаунт с правами администратора, специально для удаленного доступа, а тот аккаунт от которого работает система при загрузке понизить в правах или отключить ему возможности удаленного доступа.

Создать нового пользователя с правами администратора можно либо через настройки или контрольную панель, или выполнив команды:
net user /add Vasia2 pass222
net localgroup administrators Vasia2 /add
Дальше, если мы «разжалуем» основного пользователя из админов в стандартный аккаунт, то все дыры закроются автоматически, обычным пользователям возможности удаленного доступа в Windows по умолчанию закрыты. В этом сценарии мы столкнемся с некоторыми неудобствами, многие привычные действия как, например, использование планировщика, будут требовать введения пароля, и даже такое привычное действие как перезагрузка машины по умолчанию стандартному пользователю запрещено и требует ковыряния в настройках. Вводить пароль по каждому чиху не самое страшное, пользователям Linux или MacOS к этому не привыкать, но у такого подхода есть более серьезный недостаток. Заключается он в том, что некоторые программы просто не функционируют нормально из-под «стандартного» аккаунта. Например, MSI Afterburner умеет стартовать при загрузке только из-под аккаунта с правами администратора.

Мы пойдем другим путем, оставим «основного» юзера администратором для удобства, но закроем ему по возможности все, что касается удаленного доступа.

Во-первых, параноики могут отключить административные шары в реестре:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v AutoShareServer /t REG_DWORD /d 0 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v AutoShareWks /t REG_DWORD /d 0 /f
Майкрософт не рекомендует отключать административные шары, потому что при этом перестанет работать служба теневого копирования, которой пользуются виндовое восстановление системы и утилиты бэкапа вроде Акрониса. Здесь, к сожалению, или оставить дыру в безопасности, или заткнуть её, пожертвовав удобством бэкапов.

Во-вторых, отключим основному аккаунту возможность перегружать машину удаленно. В поиске вбиваем в зависимости от версии Windows «Security Configuration Management» или «Local Security Policy», открываем и дальше идем в Local Policies\User Rights Assignment.

Прикрепленное изображение

Там нас интересует настройка «Force shutdown from a remote system», надо удалить группу «Администраторы» и добавить туда только нашего второго, предназначенного для удаленного доступа пользователя.

Таким образом мы закрываем потенциальном зловреду возможность прописать что-то нехорошее в автозаргузку и перегрузить машину.

Варианты запуска программ при загрузке

Теперь, в любом из описанных сценариев, со встроенным администратором или с еще одним обычным, у нас есть второй пользователь, через данные которого мы будем заходить на удаленные машины и осталось определиться с методом запуска майнера при загрузке. Прописывать в реестр — не практично. Для скрипта я выбрал два других метода: ярлык на батник с майнером в пользовательской папке и планировщик задач.

Ярлык в папке Startup

В этом сценарии скрипт создает ярлык для запуска майнера в пользовательской папке автозагрузки:

C:\users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.

Ее нужно предварительно расшарить для всех, кроме «дефолтного» юзера. Напомню, что в Windows есть еще одна папка Startup, общая для всех пользователей:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

Будьте внимательны, если у вас что-то еще запускается из нее или из планировщика, чтобы избежать конфликтов.

Шарим юзерскую Startup папку из эксплорера по правой кнопке, либо следующей парой команд:
net share Startup="%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" /GRANT:%RAUsername%,FULL
icacls "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" /grant %RAUsername%:(OI)(CI)F /T /C
Планировщик задач.

Чтобы с ним можно было работать удаленно нужно зайти в настройки файерволла, выбрать «Allow a program or feature through Windows Firewall» и в списке исключений поставить галку у «Remote Scheduled Tasks Management».

Прикрепленное изображение

То же самое делает команда:
netsh advfirewall firewall set rule group="Remote Scheduled Tasks Management" new enable=yes
Скрипты для настройки удаленных машин в два клика.

На самом деле все гораздо проще и все описанные выше манипуляции сводятся к запуску скрипта на каждой ферме, который сам заведет пользователя, закроет ненужные дыры и расшарит папку Startup или настроит исключения в файволле для планировщика.

1. Определяемся со способом удаленного доступа: через встроенный аккаунт админа или через созданный. Для домашнего майнинга рекомендую первый способ, он проще в настройке и у него меньше проблем с совместимостью. Скрипт для настройки admin-account-enable.bat. Если у вас специфические требования к безопасности, и вы понимаете, с какими побочными эффектами столкнетесь, тогда второй. Скрипт для настройки add-RA-user.bat.

1.1 Для встроенного аккаунта, скрипт активирует аккаунт с именем Administrator. Если вы уже когда-либо активировали этот аккаунт и меняли ему имя, отредактируйте скрипт, замените эти три строчки:
net user administrator /active:yes
net user administrator %Password%
wmic useraccount where name='Administrator' rename '%RAUsername%'
на одну:
net user %RAUsername% /active:yes
2. Для обоих способов. Отредактируйте следующие 3 переменные в начале скрипта:
set RAUsername=My_Admin_Name_Here
set Password=pass1234
set StartOnBootMethod=Startup
Укажите имя второго аккаунта, предназначенного для удаленного доступа и пароль. Имя должно быть отлично от текущего аккаунта на ферме. Пароль нельзя оставлять пустым. В последней переменой оставьте Startup, если для автозапуска будете пользоваться папкой Startup, или пропишите Scheduler, если хотите использовать планировщик задач. Если не знаете разницы, оставьте как есть, первый способ менее капризный.

3. Сохраните скрипт и запустите его на каждой ферме обязательно по правой кнопке от администратора. Скрипт все настроит за вас. Для метода встроенного аккаунта админа перегружать машину не обязательно, для свежесозданного дополнительного аккаунта скрипт перезапустит систему. Всё. Фермы готовы для удаленной смены алгоритма.

Настройка Powershell скрипта.

Далее настроим собственно Powershell скрипт, который и будет перезапускать все майнеры в рабочей группе.

Для этого в начале скрипта в пользовательских данных прописываете названия монет и путь к батнику, который запускает майнер.
[void]$CoinList.Add(@{ Coin = 'ETH'; Path ='C:\MINE\claymore ETH dwarfpool.bat'})
Можно также запускать сам майнер напрямую, тогда параметра будет три: тикер монеты, путь к майнеру и его аргументы:
[void]$CoinList.Add(@{ Coin = 'ETH'; Path = 'C:\MINE\Claymore\EthDcrMiner64.exe'; Arguments = '-epool eth-ru.dwarfpool.com:8008 -ewal 0x2b6b59ab6dfb7d3f5b4205bd038e852465dbd4e9 -mode 1'})
И второй обязательный параметр - имя специального пользователя, которого мы завели на фермах.
$RemoteAccessUserName = 'My_Admin_Name'
В следующей переменной оставьте 'Startup' для автозапуска через пользовательскую папку или укажите 'Scheduler' для автозапуска через планировщик.
$StartOnBootMethod = 'Startup'
Существует несколько способов запускать Powershell скрипты, гугл в помощь, а в качестве готового решения пользуйтесь приложенным батником switch-remote-miner.bat, который нужно запускать из той же папки что и скрипт.
Прикрепленное изображение

Дальше запускаем скрипт, выбираем монету и компьютеры и жмем кнопку Add Job. Если для оставшихся машин нужно выбрать еще один алгоритм, добавьте второе задание аналогично. Выберите в разделе Jobs какие машины нужно перегружать и нажмите Apply.

Кнопка Reset сбрасывает интерфейс в начальное состояние. Кнопкой Query можно опросить выбранные машины и вывести табличку с информацией об автозагузке. Кнопка Clean удаляет майнеры из автозагрузки на выбранных машинах.

После запуска скрипт попросит ввести пароль, создаст ярлык на батник майнера в папке автозапуска или задание в планировщике и перезапустит фермы.

Если не охота вводить пароль каждый раз, в Powershell наберите следующую команду, введите пароль, чтобы сохранить его в файл в зашифрованном виде:
Read-Host "Enter Password" -AsSecureString | ConvertFrom-SecureString | Out-File -FilePath 'C:\Путь\К\Файлу\pwd.txt'
Затем путь к этому файлу пропишите в настройках скрипта
$SecStringPWD = 'C:\Путь\К\Файлу\pwd.txt'
Пароль будет выглядеть как набор случайных цифр. Следует понимать, что SecureString это не полноценная криптография, а простейшая защита от любопытных. Знающим человеком эта комбинация чисел элементарно расшифровывается командой Powershell:
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($(Get-Content 'C:\Путь\К\Файлу\test.txt' | ConvertTo-SecureString )))
По умолчанию скрипт сканирует имена компьютеров в сети, если у вас их их много и нужно ограничить список, чтобы сто раз не кликать мышкой, можно прописать их в переменную:
$PCList = 'Computer-1, Computer-2, Computer-3'
Тогда скрипт будет брать имена оттуда.

Скриптом можно в том числе менять алгоритм на той машине, на которой он запускается, она выделена в списке синим. Пароль в этом случае не требуется.

Скрипт можно запускать из других программ и скриптов с нижеследующими аргументами. Диалоговые окна в этом режиме не отображаются. Cписок машин разделяйте запятыми и заключайте в кавычки. Если в списке только локальный компьютер, логин и пароль не требуются. Пример для cmd:
Powershell -File "switch-remote-miner.ps1" -coin ETH -pclist "Computer-1, Computer-2" -user User_Name_Here -pass pass123 -restart
Скрипт switch-remote-miner и установочные батники:
Прикрепленный файл  Switch Remote Miner.zip (11.76К)
Количество загрузок:: 50

BTC копилочка: 1FdPR7kwbWFZ1JfXZC13HSrkZ9zFYx9wFw

  • 12



кто автор?

    • 0

проще через тимку зайти и перенастроить :)

    • -4

проще через тимку зайти и перенастроить :)

На 20-30 фермах?
    • 2

Люто плюсую, по полочкам разложено!

    • 0