当你尝试在Cygwin上启动sshd时,如何摆脱QueryServiceStatus:Win32错误1062?

我在Windows 7上安装了Cygwin和sshd,但是我无法使其工作。

我遵循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. 

configuration细节:

  • Windows 7在与具有本地pipe理权限的域用户一起运行的域中
  • netstat -a -b报告没有运行在端口22上
  • C:\cygwin\var\log\sshd.log是空的
  • 在我安装了cygwin和sshd之后,我运行了ssh-host-config -y
  • 已经尝试将SYSTEM帐户添加到3个目录中,没有更改。
  • 已经尝试了完整的系统重启,没有改变

更新:Windows日志抱怨Possible duplicate cygwin1.dll

谢谢,你的更新是解决scheme – 对于那里的其他人,在Cygwin启动时有一个针对Win32错误1062的配方#3:

1)检查应用程序事件日志,看看是否有“信息”级别的事件,如:“sshd:PID:可能重复cygwin1.dll:”

在指定的位置find这个愚蠢的重复,并重命名它或以某种方式摆脱它的path。 我在“/ cygdrive / c / Program Files(x86)/socat-1.7.2.0/cygwin1.dll”。

Boo,socat! 显然他们搞了3PP 。 甚至不知道socat是在我的系统上,显然它是作为其他安装的一部分。 我在cygwin邮件列表中发现了另外两个人遭受了重复的dll问题。

谢谢@HopelessN00b@user155148@user155148你的解决scheme的组合让我走了。

症结

我有两个问题:

  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


GAD在这个屁股上有多痛苦!

我确实find了另外一个资源,这个来自Oracle的详细信息

简而言之,如果你有greif:

  1. 运行这些步骤中的每一个。 在。 A.血腥。 时间。
    …做出修复
    …..运行cygrunsrv -S sshd
    …….大骂
  2. 检查Windoze事件日志。
    …你有重复的DLL文件?
  3. 看看/var/log/sshd.log
    …你有/etc/passwd probs吗?

我有(几乎)相同的效果和类似的解决scheme:应用程序日志显示重复的文件

可能重复的cygwin1.dll:/cygdrive/c/dakota/bin/cygwin1.dll ..

从我的达科他安装。 重命名这个DLL有窍门。 谢谢!

我有一些特权分离的问题。 在这种情况下,添加一行到/etc/passwd文件解决了这个问题。

sshd:x:74:74:特权分隔的SSH:/ var / empty / sshd:/ sbin / nologin

对我来说,这是一个兼容性问题。 我试图在Win7中运行它。 通过右键单击资源pipe理器中的文件修复,兼容性和兼容性设置为Windows Server 2003.之后工作正常。

在这里find解决scheme:

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

请注意,我的问题是专门尝试启动OpenSSH服务器,它使用Cygwin的轻型版本我猜。

/ etc / passwd响应非常接近,但UID 74是特定于其安装的。

而是使用这个cygwin命令来获取正确的UID。

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

这似乎是由sshd服务器的任何错误引起的 – 在我的情况下,它在/etc/ssh_host_rsa_key perm上出现 – 应该是0600.在/var/log/sshd查找类似。

在客户端系统上,我发现了一个名为RDPlus(www.rdplus.com.au)的程序,在端口22上运行SSH隧道选项,我必须在Cygwin sshd启动之前禁用它。 在CMD.EXE中,在应用程序事件日志中find'绑定到端口22上的0.0.0.0失败'错误后,'netstat -abo'指向此进程。 'o'选项将显示可以在任务pipe理器中find的PID。

要禁用此function,请运行RDPluspipe理工具,转到Web选项卡并禁用SSH隧道。

有人在另一个Stack Exchange问​​题上发布了这个问题,但是如果你在/var/log/sshd有一个空的文件,你应该试试/usr/sbin/sshd 。 这将输出你没有在日志中得到的错误。

对我来说,取消执行sshd服务,重新启动然后重新运行ssh-host-config,同时遵循这些指示,帮助( ls -l /var/etc告诉我,在我的第一次尝试中,空文件夹由SYSTEM拥有,这是有道理的,因为我之前跟着这个教程,但是这样,我得到了一个“/ var / empty必须由root拥有,而不是组或世界可写的”错误)。

我正在使用包含cygwin1.dll Cntlm (NTLM身份validation代理),避免这种重复解决了这个问题。

我使用本地帐户cyg_server来运行sshd。 我需要将/ var / empty的权限设置为700,将所有者设置为cyg_server,尽pipe错误消息表示所有者必须是root用户。

我也删除了当天的消息(/ etc / motd),但是我不认为这是绝对必要的。 它有时妨碍我的自动化。

FWIW,cyg_server是严格的本地用户,具有pipe理员权限,没有Active Directory定义。 它在registry和/ etc / passwd中列出。

接受Cygwin最新更新后,我还必须编辑cyg_server的权限。

 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$