Как избавиться от QueryServiceStatus: Win32 ошибка 1062 при попытке запустить sshd на Cygwin?

Я установил Cygwin и sshd на Windows 7, но не могу заставить его работать.

Я следовал руководству с http://www.noah.org/ssh/cygwin-sshd.html но все равно получаю:

$ cygrunsrv -S sshd
cygrunsrv: Error starting a service: QueryServiceStatus:  Win32 error 1062:
The service has not been started.

Детали конфигурации:

  • Windows 7 в домене, работающем с пользователем домена с локальными правами администратора
  • netstat -a -b ничего не сообщает о работе порта 22
  • C:\cygwin\var\log\sshd.log пустой
  • После того, как я установил cygwin и sshd, я запускаю ssh-host-config -y
  • Уже пытался добавить учетную запись SYSTEM в 3 каталогах, без изменений.
  • Уже пробовал полную перезагрузку системы, без изменений

Обновление: Журналы Windows жалуются на Possible duplicate cygwin1.dll

11 ответов

Спасибо, Ваше обновление было решением - для всех остальных существует рецепт № 3 против ошибки Win32 1062 при запуске Cygwin:

1) Проверьте журнал событий приложения, посмотрите, есть ли там события уровня "Информация" с чем-то вроде: "sshd: PID: возможный дубликат cygwin1.dll:"

Найдите этот глупый дубликат в указанном месте и переименуйте его или как-нибудь избавьтесь от него. Мой был в "/cygdrive/c/Program Files (x86)/socat-1.7.2.0/cygwin1.dll."

Бу, сокат! Видимо они занимаются 3PP. Я даже не знал, что socat был в моей системе, очевидно, он был частью какой-то другой установки. В списках рассылки cygwin я обнаружил двух других людей, которые пострадали от проблемы duplicate-dll.

Спасибо @HopelessN00b, @user155148, @Algomorph комбинация ваших решений заставила меня двигаться вперед.

Суть

У меня было две проблемы:

  1. дублировать cygwin1.dll файлы.
  2. /var/log/sshd.log: "Пользователь с разделением привилегий sshd не существует"

Мое исправление

  1. Разберитесь с кровавыми двойными файлами рассола:

    cd /cygdrive/c/Program\ Files\ \(x86\)/cwRsync/bin
    mv cygwin1.dll cygwin1_.dll
    
  2. Добавил пользователя путем редактирования /etc/passwd и добавив следующую строку:

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    

Обратите внимание, что имя пользователя 'sshd' пришло от /var/log/sshd.log,


Боже, какая боль в заднице это!

Я нашел еще один ресурс, более подробный и из Oracle

В двух словах, если у вас есть greif:

  1. Выполните каждый из этих шагов ОДИН. В. А. КРОВАВА. ВРЕМЯ.
    ... исправить
    .....бежать cygrunsrv -S sshd
    ....... проклинаю обильно
  2. Проверьте журналы событий Windoze.
    ... У вас есть дубликаты DLL-файлов?
  3. Взгляни на /var/log/sshd.log
    ...У тебя есть /etc/passwd Probs?

У меня была проблема с разделением привилегий. В этом случае добавление строки в /etc/passwd файл решил проблему.

sshd: x: 74: 74: SSH, разделенный привилегиями:/var/empty/sshd:/sbin/nologin

У меня был (почти) тот же эффект и аналогичное решение: журнал приложений показал дубликат файла

Возможный дубликат cygwin1.dll: /cygdrive/c/dakota/bin/cygwin1.dll..

из моей установки Дакота. Переименование этой DLL сделал свое дело. Спасибо!

Для меня это оказалось проблемой совместимости. Я пытался запустить его в Win7. Исправлено щелчком правой кнопкой мыши по файлу в проводнике, переходом к совместимости и настройкой совместимости с Windows Server 2003. После этого все работало нормально.

Нашел решение здесь:

http://h30499.www3.hp.com/t5/Windows-Server-2008/Installing-OpenSSH-on-Windows-server-2008/td-p/4777839

Обратите внимание, что моя проблема была связана именно с попыткой запустить OpenSSH Server, который использует облегченную версию Cygwin.

Я использую локальную учетную запись, cyg_server, для запуска sshd. Мне нужно было установить разрешения для /var/empty равным 700, а владельцу - cyg_server, несмотря на то, что в сообщении об ошибке сказано, что владелец должен быть пользователем root.

Я также удалил сообщение дня (/etc/motd), но я не думаю, что это строго необходимо. Иногда это мешает моей автоматизации.

FWIW, cyg_server - строго локальный пользователь с правами администратора и без определения Active Directory. Он указан в реестре и находится в /etc/passwd.

Мне также пришлось редактировать права cyg_server после принятия недавнего обновления Cygwin.

cygrunsrv -E sshd
editrights -a SeAssignPrimaryTokenPrivilege -u cyg_server
editrights -a SeCreateTokenPrivilege -u cyg_server
editrights -a SeTcbPrivilege -u cyg_server
editrights -a SeServiceLogonRight -u cyg_server
cygrunsrv -S sshd

остановил sshd, изменил права учетной записи службы и перезапустил sshd.

Так устанавливаются права после этой быстрой сессии.

bash-4.4$  editrights -u cyg_server -l
SeAssignPrimaryTokenPrivilege
SeCreateTokenPrivilege
SeTcbPrivilege
SeServiceLogonRight
SeDenyRemoteInteractiveLogonRight
bash-4.4$ 

Я использовал Cntlm (NTLM аутентификационный прокси), который содержит cygwin1.dll также избежание такого дублирования решило проблему.

В клиентской системе я обнаружил программу под названием RDPlus (www.rdplus.com.au), которая запускает опцию туннелирования SSH на порту 22, которую мне пришлось отключить до запуска Cygwin sshd. Из CMD.EXE "netstat -abo" указал на этот процесс после обнаружения ошибки "Привязка к порту 22 на 0.0.0.0 fail" в журнале событий приложений. Опция 'o' покажет PID, который можно найти в диспетчере задач.

Чтобы отключить это, запустите инструмент администратора RDPlus, перейдите на вкладку Web и отключите SSH Tunneling.

Ответ /etc/passwd был очень близок, но UID 74 был специфичен для его установки.

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

mkpasswd -l -u sshd >> /etc/passwd

Кажется, это вызвано ЛЮБОЙ ошибкой на сервере sshd - в моем случае это вызвано /etc/ssh_host_rsa_key химическая завивка - должно быть 0600. смотреть в /var/log/sshd или похожие.

Кто-то опубликовал это в другом вопросе по Stack Exchange, но если у вас есть пустой файл в /var/log/sshd, тебе стоит попробовать /usr/sbin/sshd, Это выведет ошибки, которые вы не получили в журнале.

Для меня помогла деинсталляция служб sshd, перезагрузка и повторный запуск ssh-host-config, следуя этим инструкциям, (ls -l /var/etc сказал мне, что в моей первой попытке пустая папка принадлежала SYSTEM, что имеет смысл, так как я следовал этому руководству ранее. Однако, таким образом, я получил сообщение "/var/empty должно принадлежать пользователю root, а не группе или общедоступной записи").

Другие вопросы по тегам