如何以交互方式运行 Windows OpenSSH 服务器?

如何以交互方式运行 Windows OpenSSH 服务器?

众所周知,Windows 10 上的 OpenSSH Server ( sshd.exe) 默认作为服务运行。但有些情况下需要在交互式 Windows 会话中运行 OpenSHH Server,而不是默认在会话 0 中运行。例如,假设您从某个 Linux/Android 连接到 Windows,并且不想使用 VNC 等桌面连接。那么就不可能rundll32.exe user32.dll,LockWorkStation通过 SSH 成功运行以下命令:锁工作站功能需要桌面会话,即会话 1、会话 2 等。并且

不久前我发现了一个邮政指出可以在 Windows 上以交互方式运行 SHH Server,但当时没有给出具体说明:

您可以在交互式 Windows 会话中运行 SSH 服务器,而不是将其作为服务运行。不过,它有其局限性。

现在我正在寻找那些。

我尝试sshd.exe直接cmd通过配置文件运行并记录如下

c:\Windows\System32\OpenSSH\sshd.exe -f c:\Windows\System32\OpenSSH\sshd_config_default -E log.txt

但以这种方式启动的服务器不支持任何传入连接。日志文件包含的信息很少:

Accepted password for The_Immortal from ::1 port 28532 ssh2
CreateProcessAsUserW failed error:1314
fork of unprivileged child failed

不幸的是,没有内置适当的帮助sshd.exe。它只显示参数的一般列表

usage: sshd [-46DdeiqTt] [-C connection_spec] [-c host_cert_file]
            [-E log_file] [-f config_file] [-g login_grace_time]
            [-h host_key_file] [-o option] [-p port] [-u len]

我很沮丧,最终需要做什么才能sshd.exe以交互方式运行?


更新型多巴胺:我刚刚发现了一个大解决方法与我的问题类似,但它涉及一些定制的(升级的)OpenSSH 服务器。无论如何,sshd -d我遇到了与上述相同的错误。

答案1

前言

帮助我解决这个问题的是,我了解到以“交互模式”运行 sshd 相当于以普通用户(而非 root)身份运行 sshd。在 Linux 上我从未这样做过,但一旦以这种方式定义,在线查找帮助就更容易了。

以非特权用户身份运行 sshd 存在三个问题:

  1. 无法访问 1024 以下的端口。
  2. 无法读取 ssh 主机密钥(位于/etc/ssh/ssh_host_{ecdsa,ed25519,rsa,dsa}_key{,.pub}
  3. 无法将 PID 文件写入ssh_host_ecdsa_key

来源

解决方案

  1. 主机密钥

在以下位置打开 cmd 提示符%userprofile%\.ssh

ssh-keygen -q -N "" -t dsa -f ./ssh_host_dsa_key
ssh-keygen -q -N "" -t rsa -b 4096 -f ./ssh_host_rsa_key
ssh-keygen -q -N "" -t ecdsa -f ./ssh_host_ecdsa_key
ssh-keygen -q -N "" -t ed25519 -f ./ssh_host_ed25519_key
  1. sshd_config 复制代码

复制%programdata%\ssh\sshd_config%userprofile%\ssh

Port <BETWEEN-1024-AND-65535>
HostKey C:\Users\<USER>\.ssh\ssh_host_rsa_key
HostKey C:\Users\<USER>\.ssh\ssh_host_dsa_key
HostKey C:\Users\<USER>\.ssh\ssh_host_ecdsa_key
HostKey C:\Users\<USER>\.ssh\ssh_host_ed25519_key
PidFile C:\Users\<USER>\.ssh\sshd.pid
  1. 在防火墙中打开新端口

netsh advfirewall firewall add rule name="Open Port <BETWEEN-1024-AND-65535>" dir=in action=allow protocol=TCP localport=<BETWEEN-1024-AND-65535>

  1. 启动批处理脚本

sshd-interactive-mode.bat在*文件夹中创建Startup

start "" C:\Users\user\bin\SilentCMD\SilentCMD.exe "C:\Program Files\OpenSSH\sshd.exe" -f C:\Users\user\.ssh\sshd_config

SilentCMD将其作为后台任务生成。下载并保存到 =%userprofile%\bin\SilentCMD= start ""以防止 cmd 提示符徘徊在桌面上sshd 退出后

笔记

  • 我选择将所有内容保存在用户.ssh目录中,但您可以选择单独的目录。
  • 启动文件夹:C:\Users\<USER>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

答案2

您想以交互模式运行它,这样您就可以与本地桌面交互。(控制台会话)

sshd -d

请注意,默认情况下,这只允许当前用户登录,并且只能使用私钥。

如果您想要其他任何东西,您将必须手动授予您的用户额外的权限。

用于query session验证您是否已登录到所需的会话。

否则,Windows 在设计上会费很多力气来将服务与用户交互隔离开来。

相关内容