Я установил 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.
Детали конфигурации:
netstat -a -b
не сообщает о работе порта 22C:\cygwin\var\log\sshd.log
пустоssh-host-config -y
Обновление: журналы Windows жалуются на Possible duplicate cygwin1.dll
Спасибо, ваше обновление было решением - для всех, кто там есть, есть рецепт №3 против ошибки Win32 1062 при запуске Cygwin:
1) Проверьте журнал событий приложения, посмотрите, есть ли там события уровня «Информация» с чем-то вроде: «sshd: PID: Возможный дубликат cygwin1.dll:»
Найдите этот глупый дубликат в указанном месте и переименуйте его или как-нибудь избавьтесь от него. Мой был в "/ cygdrive / c / Program Files (x86) /socat-1.7.2.0/cygwin1.dll".
Бу, сокат! Видимо они занимаются 3ПП. Я даже не знал, что socat был в моей системе, очевидно, он был частью какой-то другой установки. Я нашел еще двух человек в списках рассылки cygwin, страдающих от проблемы с дублированием 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
.
GAD, какая это заноза в заднице!
Я нашел еще один ресурс, этот более подробный и из Oracle
Вкратце, если у вас greif:
cygrunsrv -S sshd
/var/log/sshd.log
/etc/passwd
проблемы?У меня был (почти) такой же эффект и аналогичное решение: журнал приложений показал дублированный файл
Возможный дубликат cygwin1.dll: /cygdrive/c/dakota/bin/cygwin1.dll ..
из моей установки dakota. Переименование этой dll помогло. Спасибо!
У меня была проблема с разделением привилегий. В этом случае добавление строки к /etc/passwd
файл решил проблему.
sshd: x: 74: 74: SSH с разделением привилегий: / var / empty / sshd: / sbin / nologin
Для меня это оказалось проблемой совместимости. Пытался запустить в Win7. Исправлено щелчком правой кнопкой мыши по файлу в проводнике, переход к совместимости и настройке совместимости с Windows Server 2003. После этого все работало нормально.
Нашел решение здесь:
Обратите внимание, что моя проблема была связана конкретно с попыткой запустить OpenSSH Server, который, как мне кажется, использует облегченную версию Cygwin.
Ответ / etc / passwd был очень близок, но UID 74 был специфическим для его установки.
вместо этого используйте эту команду cygwin, чтобы получить правильный UID.
mkpasswd -l -u sshd >> / etc / passwd
Кажется, это вызвано ЛЮБОЙ ошибкой с сервером sshd - в моем случае он отключился /etc/ssh_host_rsa_key
завивка - должно быть 0600. смотреть в /var/log/sshd
или похожие.
В клиентской системе я обнаружил программу под названием RDPlus (www.rdplus.com.au), запускающую параметр SSH-туннелирования на порту 22, который мне пришлось отключить до запуска Cygwin sshd. Из CMD.EXE команда netstat -abo указала на этот процесс после обнаружения ошибки «Привязка к порту 22 на 0.0.0.0 не удалась» в журнале событий приложений. Параметр «o» покажет PID, который можно найти в диспетчере задач.
Чтобы отключить это, запустите инструмент администрирования RDPlus, перейдите на вкладку «Интернет» и отключите SSH-туннелирование.
Кто-то разместил это в другом вопросе Stack Exchange, но если у вас есть пустой файл в /var/log/sshd
, Ты должен попытаться /usr/sbin/sshd
. Это выведет ошибки, которых вы не попали в журнал.
Для меня удаление служб sshd, перезагрузка и повторный запуск ssh-host-config, следуя эти инструкция, помогло (ls -l /var/etc
сказал мне, что в моей первой попытке пустая папка принадлежала SYSTEM, что имеет смысл, поскольку я следил за этот учебник ранее. Однако таким образом я получил ошибку «/ var / empty должен принадлежать root, а не группе или доступу для записи всем»).
Я использовал Cntlm
(Прокси-сервер проверки подлинности NTLM), который содержит cygwin1.dll
и предотвращение такого дублирования решило проблему.
Я использую локальную учетную запись 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$