No private key is available -- это как?

Странная ситуация.
Windows 11 Pro 23H2, build 22631.5472

Для подписывания .exe / .dll / .msi на билдсервере с апреля 2024 использовался .cmd файлик, в котором есть вот такая строчка:

c:\bin\sysinternals\psexec -accepteula -nobanner -i -u builder -p user-password "c:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\%XX%\signtool.exe" sign /q /fd sha256 /f filename.cer /csp "Aktiv ruToken CSP v1.0" /kc rutoken-container-id full-pathname-for-sign

Для того чтобы запрос к рутокену всегда был от одного специального юзера.

Когда я дергаю этот скрипт в окошке cmd.exe -- все работает, и под моим аккаунтом, и под builder

но когда этот же скрипт дергает jenkins, агент которого запущен под аккаунтом этого самого builder -- выдается сообщение

SignTool Error: No private key is available.

Причем буквально вчера это работало.

Что могло измениться/слететь? pcache.txt дата/время осталось апрель 2024.

В чем такая разница, запускается через ssh соединение к Windows-машине или напрямую, учитывая что и там и там выполняется psexec?

Куда копать, что проверять? У меня идеи кончились.

Re: No private key is available -- это как?

только что проверил - если открыть cmd.exe, в нем работает.
но если я по ssh подцепляюсь к своей же машине -- то выдает ошибку.
Как с этим бороться?

Re: No private key is available -- это как?

Здравствуйте, Korsar13,
уточните, пожалуйста, ssh-сервис из-под того же пользователя работает или нет?

Re: No private key is available -- это как?

самое забавное, что если запускать батничек из Task Sheduler, выдав юзеру права на Batch Job -- то точно так же приватный ключ не находится

Re: No private key is available -- это как?

Фатеева Светлана пишет:

Здравствуйте, Korsar13,
уточните, пожалуйста, ssh-сервис из-под того же пользователя работает или нет?

ssh-сервис работает от LocalSystem
cmd.exe при ssh-логоне уже работает от конкретного пользователя.

и получается, что в окошке под моим текущим юзером -- работает.
делаю

ssh localhost

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

позднее попробовал -- запуск из-под Task Scheduler так же выдает "нет приватного ключа"

Re: No private key is available -- это как?

уточняю:
sshd.exe работает от имени NT AUTHORITY\SYSTEM
дочерний процесс sshd.exe -- уже от имени моего юзера
в нем запущен conhost.exe, в котором запущен cmd.exe, оба уже под моим логином

Re: No private key is available -- это как?

Korsar13,
Попробуйте в том же окружении при подключении по SSH:

1) зарегистрировать сертификат в MY и передавать его в signtool через ключ хеш-сертификата /sha1 <.....>
2) добавить в скрипт вызов signtool с флагом /debug
3) добавить в скрипт "certutil -scinfo"

Re: No private key is available -- это как?

Korsar13, уточните, удалось ли выполнить указанный запрос?
Пришлите, пожалуйста, результат вывода утилит.

Re: No private key is available -- это как?

Фатеева Светлана пишет:

Korsar13,
Попробуйте в том же окружении при подключении по SSH:

1) зарегистрировать сертификат в MY и передавать его в signtool через ключ хеш-сертификата /sha1 <.....>
2) добавить в скрипт вызов signtool с флагом /debug
3) добавить в скрипт "certutil -scinfo"

при запуске через ssh certutil -scinfo обламывается по ошибке доступа:

The Microsoft Smart Card Resource Manager is not running.
SCardAccessStartedEvent: Service is in an unknown state.
CertUtil: -SCInfo command FAILED: 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED)
CertUtil: Access is denied.

при запуске без ssh -- нормально показывает сертификат

"зарегистрировать сертификат в MY" -- не совсем понял, где именно зарегистрировать и как?

Re: No private key is available -- это как?

Фатеева Светлана пишет:

Korsar13,
1) зарегистрировать сертификат в MY и передавать его в signtool через ключ хеш-сертификата /sha1 <.....>

понял. но я сертификат передаю явным образом через /f с именем .cer файла

Re: No private key is available -- это как?

Korsar13,
попробуйте и sshd  запускать от имени того пользователя, которому доступны сертификаты.
Индикатором работы - вызов SCInfo, который покажет сертификат.

Re: No private key is available -- это как?

Korsar13,
также попробуйте в SSH сессии выполнить команду Query Session как описано  здесь.
Служба смарт-карт доступна только если session id будет имеет значение "1".

Re: No private key is available -- это как?

вот самое забавное, что если из-под ssh запустить

c:\bin\sysinternals\psexec -accepteula -nobanner -i -u ...имя-юзера... -p ...пароль... certutil -scinfo

то вывод команды я не вижу, но завершается с кодом 0 вместо ошибки:

certutil exited with error code 0

jsign тоже удалось заставить работать, хотя пишут что через него подписывает медленнее -- когда подписывать надо сотни мегабайт, это может оказаться заметно.
думаю над вариантом, где получить хэш через signtool sign /dg, подписать его самописной тулзой/сервисом и вклеить обратно через signtool sign /di а потом уже дернуть signtool timestamp

Re: No private key is available -- это как?

Фатеева Светлана пишет:

Korsar13,
также попробуйте в SSH сессии выполнить команду Query Session как описано  здесь.
Служба смарт-карт доступна только если session id будет имеет значение "1".

akvis\builder@K13WORK C:\Users\builder.AKVIS>query session
No session exists for *

Re: No private key is available -- это как?

ну вот обходной путь через psexec пока снова работает (так и не понял, почему не работало какое-то время), так что облегченно выдыхаем