При налаштуванні WinRM на серверах в домені Active Directory зіткнувся з дивною проблемою. Після того як служба WinRM була налаштована і включена на сервері, до неї дозволено віддалене підключення через Windows PowerShell Remoting, при спробі віддаленого підключення до даного сервера за допомогою команди Enter-PSSession msk-dp01
в консолі PowerShell з'являється наступна помилка WinRM:
рядок: 1 знак: 1
+ Enter-PSSession msk-dp01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (msk-dp01: String) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId: CreateRemoteRunspaceFailed
В англійській версії Windows помилка виглядає так:
PS C: \ Windows \ system32> Enter-PSSession msk-dp01Enter-PSSession: Connecting to remote server msk-dp01 failed with the following error message: The WinRM client received an HTTP bad request status (400), but the remote service did not include any other information about the cause of the failure. For more information, see the about_Remote_Troubleshooting Help topic.
At line: 1 char: 1
+ Enter-PSSession msk-dp01
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (msk-dp01: String) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId: CreateRemoteRunspaceFailed
При цьому на сервері порти WinRm (5985 / HTTP, 5986 / HTTPS) відповідають і приймають сполуки. Перевірити доступність TCP портів WinRM можна за допомогою утиліти PortQryV2 або командлет PowerShell Test-NetConnection:
TNC msk-dp01 -port 5985
Як виявилося, проблема виявилася пов'язана з великим розміром токена Kerberos у користувача, за рахунок того, що користувач полягає в занадто великій кількості доменних груп. Помилка виникає при перевищенні розміру токена 16 Кб (див статтю MaxTokenSize - розмір токена Kerberos). У нашій ситуації відбувається все те ж саме, сервер WinRm скидає запит від клієнта, тому що розмір заголовка пакету аутентифікації перевищує 16 Кб. У статті за посиланням ми згадували, що за замовчуванням в IIS використовується розмір HTTP заголовка не більше 16 Кб, і в разі проблем з HTTP аутентифікації через велику токена користувача, його потрібно збільшити до 64 Кб
Щоб виправити проблему, потрібно зменшити розмір токена (зменшити кількість груп безпеки, створені учасником), а якщо це неможливо, тоді в редакторі реєстру на сервері потрібно змінити значення наступних DWORD параметрів реєстру в гілці HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ HTTP \ Parameters
- MaxFieldLength збільшити до 0000ffff (65535)
- MaxRequestBytes збільшити до 0000ffff (65535)
Залишилося перезавантажити сервер і перевірити підключення WinRm через Enter-PSSession з клієнта.