众所周知,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 存在三个问题:
- 无法访问 1024 以下的端口。
- 无法读取 ssh 主机密钥(位于
/etc/ssh/ssh_host_{ecdsa,ed25519,rsa,dsa}_key{,.pub}
- 无法将 PID 文件写入
ssh_host_ecdsa_key
解决方案
- 主机密钥
在以下位置打开 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
- 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
- 在防火墙中打开新端口
netsh advfirewall firewall add rule name="Open Port <BETWEEN-1024-AND-65535>" dir=in action=allow protocol=TCP localport=<BETWEEN-1024-AND-65535>
- 启动批处理脚本
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 在设计上会费很多力气来将服务与用户交互隔离开来。