У любого админящего кучу серваков по RDP рано или поздно возникает желание облегчить себе жизнь. Одной из проблем являются разношёрстные аккаунты (например в разных доменах) + необходимость периодически менять пароли. Конечно можно пользоваться функцией запоминания пароля, однако хотя бы 1 раз для каждого сервера пароль после смены придётся ввести и поставить заветную галочку. Хочется сделать это проще и малой кровью. Чтож способ есть.
Старый формат rdp файла позволял хранить пароль в зашифрованном виде, причём использовалось шифрование с привязкой к учётной записи и машине, т.е. на другом компьютере этот rdp файл бесполезен, воровать его предварительно не расшифровав бесполезно. К счастью обратная совместимость у новых версий rdp есть и можно например нагенерировать простейшим bat файлом кучу файликов для подключения с этим самым паролем старого формата. Шифрование пароля будем выполнять утилитой cryptRDP5.exe
из этого поста. bat'ник из поста разумеется немного причешем под свои задачи:
@echo off
set user=%1
set pwd=%2
rem Тут размещаем вызовы функции makerdp для своих серверов аналогично примеру ниже:
call :makerdp RUS PROD MYDOMAIN1 server1.domain1.local %user% %pwd%
call :makerdp AMN TEST MYDOMAIN2 server1.domain2.local %user% %pwd%
goto :EOF
:makerdp
set hashtool=".\cryptRDP5.exe"
set country=%1
set envir=%2
set domain=%3
set comp=%4
set usr=%5
set pwd=%6
for /f "tokens=*" %%a in ('%hashtool% %pwd%') do set pwdhash=%%a
set outputfile=".\%country%_%envir%_%comp%.rdp"
If EXIST %outputfile% del %outputfile%
echo screen mode id:i:2>> %outputfile%
echo desktopwidth:i:1440>> %outputfile%
echo desktopheight:i:900>> %outputfile%
echo session bpp:i:24>> %outputfile%
echo winposstr:s:0,1,32,68,800,572>> %outputfile%
echo full address:s:%comp%>> %outputfile%
echo compression:i:1>> %outputfile%
echo keyboardhook:i:2>> %outputfile%
echo audiomode:i:2>> %outputfile%
echo redirectdrives:i:0>> %outputfile%
echo redirectprinters:i:0>> %outputfile%
echo redirectcomports:i:0>> %outputfile%
echo redirectsmartcards:i:1>> %outputfile%
echo displayconnectionbar:i:1>> %outputfile%
echo autoreconnection enabled:i:1>> %outputfile%
echo authentication level:i:0>> %outputfile%
echo username:s:%usr%>> %outputfile%
echo domain:s:%domain%>> %outputfile%
echo alternate shell:s:>> %outputfile%
echo shell working directory:s:>> %outputfile%
echo password 51:b:%pwdhash%>> %outputfile%
echo disable wallpaper:i:1>> %outputfile%
echo disable full window drag:i:0>> %outputfile%
echo disable menu anims:i:0>> %outputfile%
echo disable themes:i:0>> %outputfile%
echo disable cursor setting:i:0>> %outputfile%
echo bitmapcachepersistenable:i:1>> %outputfile%
exit /b 0
:EOF
После чего запустив его с параметрами логина и пароля получим на выходе пачку файлов типа RUS_PROD_server1.domain1.local.rdp, которые позволяют заходить на сервер в 1 клик. Однако это ещё не всё. Иногда народ забывает завершать сессии и заканчиваются подключения к серверу, в итоге зайти не удаётся. Для обхода этой ситуации можно имея админские права на сервере запустить свой mstsc.exe с параметром /admin что позволит подключиться к консольной сессии сервера и завершить чей-нибудь простаивающий сеанс. Для упрощения задачи раз уж мы завязываемся на rdp файлы сделаем небольшой финт ушами в реестре:
REGEDIT4
[HKEY_CLASSES_ROOT\RDP.File\shell\ConsoleSession]
@="ConsoleSession"
[HKEY_CLASSES_ROOT\RDP.File\shell\ConsoleSession\command]
@="mstsc.exe /admin \"%l\""
Теперь у rdp файлов в контекстном меню есть пункт "ConsoleSession" позволяющий цепляться в консольную сессию. Если не ошибаюсь, то в какой-то версии rdp вместо ключа /admin нужен ключ /console, так что если вдруг не заведётся, то попробовать другой ключ.
Ах да, понимаю что капитаню и бояню, но просто сейчас впервые с таким количеством столкнулся что задумался про автоматизацию и немного удобства.