我(终于)让 sshd 在 Win7 上的 cygwin 下运行了 - 嗯,有点儿像。
sshd 以用户“cyg_server”的身份运行。我能够使用相同的用户名成功 ssh 到我的计算机。
但是,如果我尝试使用我的普通 (Windows) 用户名进行 ssh,它会尝试为我的登录会话分配 pty,但失败了。例如,“sshd -D -d -d -d”的输出包含以下内容
debug1: Entering interactive session for SSH2.
debug2: fd 4 setting O_NONBLOCK
debug2: fd 5 setting O_NONBLOCK
debug1: server_init_dispatch_20
debug1: server_input_channel_open: ctype session rchan 0 win 1048576 max 16384
debug1: input_session_request
debug1: channel 0: new [server-session]
debug2: session_new: allocate (allocated 0 max 10)
debug3: session_unused: session id 0 unused
debug1: session_new: session 0
debug1: session_open: channel 0
debug1: session_open: session 0: link with channel 0
debug1: server_input_channel_open: confirm session
debug1: server_input_global_request: rtype [email protected] want_reply 0
debug1: server_input_channel_req: channel 0 request pty-req reply 1
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req pty-req
debug1: Allocating pty.
debug1: session_pty_req: session 0 alloc /dev/pty1
!!! chown(/dev/pty1, 17308, 10513) failed: Invalid argument
debug1: do_cleanup
debug1: session_pty_cleanup: session 0 release /dev/pty1
目前 /dev 由我的普通帐户拥有。我尝试将其所有权更改为 cyg_server 以及 SYSTEM。在这两种情况下,问题仍然存在。我还更改了 /dev 的权限(例如 700 和 777) - 问题仍然存在。
[附注:每当我执行“ls -al /dev”时,pty 都不会显示,这很奇怪。但是,如果我对我知道存在的 pty 执行“ls -l /dev/ptyX”,它就会显示出来。这对于 cygwin 来说正常吗?]
答案1
ssh-host-config
删除所有 /etc/ssh* 文件并在以管理员身份打开的 cygwin 窗口中重新运行解决了这个问题,我认为通过更正权限就可以解决。
在让它工作之前我必须做大量的检查和纠正:
- 密钥
/etc/ssh*
文件由特权服务器帐户(例如 cyg_server)拥有、读取和写入 /dev
属于我的(管理员)用户帐户,并且可由管理员、用户和 sshd 用户读写- 服务已重启
- 您已设置环境变量
CYGWIN=ntsec
答案2
在通过最初执行“sysprep”克隆原始 Windows VM 后,我遇到了一个奇怪的问题 -
“这会更改计算机的 SID=>所有本地用户的 SID,但 /etc/password 当然保持不变。这导致公钥授权失败,并在 Win' 应用程序事件日志中显示“sshd: fatal: chown(/dev/pty1) failed: Permission denied”消息。
总结运行提升的 Cygwin 控制台(以管理员身份),net stop sshd,执行“mkpasswd -l”并从其输出中替换 /etc/passwd 中的所有本地帐户信息,然后删除 /etc/ssh*、ssh-host-config、net start sshd,这对我来说是解决办法。