Как избавиться от 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
ничего не сообщает о работе порта 22C:\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
комбинация ваших решений заставила меня двигаться вперед.
Суть
У меня было две проблемы:
- дублировать
cygwin1.dll
файлы. /var/log/sshd.log
: "Пользователь с разделением привилегий sshd не существует"
Мое исправление
Разберитесь с кровавыми двойными файлами рассола:
cd /cygdrive/c/Program\ Files\ \(x86\)/cwRsync/bin mv cygwin1.dll cygwin1_.dll
Добавил пользователя путем редактирования
/etc/passwd
и добавив следующую строку:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
Обратите внимание, что имя пользователя 'sshd' пришло от /var/log/sshd.log
,
Боже, какая боль в заднице это!
Я нашел еще один ресурс, более подробный и из Oracle
В двух словах, если у вас есть greif:
- Выполните каждый из этих шагов ОДИН. В. А. КРОВАВА. ВРЕМЯ.
... исправить
.....бежатьcygrunsrv -S sshd
....... проклинаю обильно - Проверьте журналы событий Windoze.
... У вас есть дубликаты DLL-файлов? - Взгляни на
/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. После этого все работало нормально.
Нашел решение здесь:
Обратите внимание, что моя проблема была связана именно с попыткой запустить 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, а не группе или общедоступной записи").