当我尝试使用 PuTTY 连接到 SSH 服务器时,出现错误:
/bin/bash: Operation not permitted
然后我收到一个消息框,提示:
Connection closed by remote host
今天意外地发生了这种情况,我不知道为什么,在此之前 SSH 连接工作正常。
是什么原因导致了这个错误?有什么方法可以修复它?
编辑:该服务器是 Windows 机器,而不是 Linux,并且运行 Cygwin 的 sshd。我还发现了这篇我认为可能相关的帖子 -https://cygwin.com/ml/cygwin/2016-03/msg00097.html
答案1
以下是 Константин Брызгалов 和 Mun-dee 之前发帖提到的更直接的方法。以管理员身份运行 cygwin 终端,然后:
# stop the running sshd:
net stop sshd
# give the ssh user required privileges:
editrights -a SeTcbPrivilege -u cyg_server
editrights -a SeAssignPrimaryTokenPrivilege -u cyg_server
editrights -a SeCreateTokenPrivilege -u cyg_server
# restart sshd:
net start sshd
答案2
我花了很多时间尝试解决同样的问题。偶然发现了一个解决方案:
https://cygwin.com/ml/cygwin/2015-08/msg00162.html
在 cygwin 服务器上:
- 转到“控制面板”>“管理工具”。
- 选择本地安全策略 > 本地策略 > 用户权限分配。
- 右键单击“替换进程级令牌”并选择“安全”或“属性”。
- 单击“添加”以添加正在运行 sshd 的帐户。(在我的情况下是 cyg_server)
- 更新
- 重启 sshd 服务
现在尝试通过 ssh 连接...我成功了
答案3
我遇到了这个问题并解决了。
最初我遵循了康斯坦丁·布列兹加洛夫并且能够使用密码登录,但无法使公钥认证正常工作。(我已手动创建了本地 cyg_server 管理员帐户。)
经过进一步调查,我读到了这一页它说要避免同时拥有域和本地帐户。我检查了一下,发现我确实同时拥有这两个帐户;显然我组织中的其他人正在运行 cygwin 服务器,并且已经在域上创建了 cyg_server,这与我的本地帐户混淆了。
我删除了本地 cyg_server 帐户,卸载了 sshd 服务,然后按照该页面的说明重新安装,一切都运行正常。诀窍是对使用现有的 cyg_server 帐户说“不”,并告诉 ssh-host-config 创建一个“cyg_server1”帐户。它创建了一个本地帐户并正确设置了所有内容。具体来说:
- cygrunsrv——停止 sshd
- cygrunsrv——删除 sshd
- 控制面板 > 用户帐户 > 管理用户帐户 > (删除本地 cyg_server 帐户)
- mkpasswd -l -d >/etc/passwd
- mkgroup -l -d >/etc/group
- ssh 主机配置
- 覆盖 = 是
- 严格 = 是
- CYGWIN = ntsec
- 运行用户 = cyg_server1
- 密码 = {...}
检查用户帐户,您将看到 cyg_server1 确实是一个本地帐户,但有额外的设置。
答案4
感谢 Константин Брызгалов 为我指明了正确的方向,我也遇到了完全相同的问题。
您可以在这里找到更彻底的解决方案:https://cygwin.com/faq.html#faq.using.sshd-in-domain 实际上有 3 个策略设置需要配置 cyg_server:
- 作为操作系统的一部分 (SeTcbPrivilege)
- 创建令牌对象(SeCreateTokenPrivilege)
- 替换进程级令牌(SeAssignPrimaryTokenPrivilege)