一台 Windows 机器上有多个账号,其中一个需要在后台保持登录来跑依赖桌面会话的定时任务。手动用远程桌面连一下太原始,改注册表 AutoAdminLogon 也只能设默认登录账号,无法在 A 账号已登录的情况下让 B 账号也在后台上线。最终方案:用 Node.js 在本地跑一个 RDP 客户端,连本机 3389 端口把目标账号登上去。
原理
RDP 协议就是远程桌面用的协议,mstsc.exe 通过它连目标机器、发送凭据、建立会话。这个项目用了基于 node-rdpjs 改造的协议库,等于用 Node.js 实现了一个精简版 RDP 客户端。连接目标设成 127.0.0.1:3389(连自己),把用户名密码发过去,Windows 就会为该账号创建会话。登录完成后客户端退出,但会话保持。
再配一个 VBS 脚本把控制台窗口藏掉,扔到开机启动里,就实现了全自动、无感知的后台登录。
使用方式
1. 安装依赖
机器上需要先有 Node.js:
git clone https://github.com/sibosend/rdp-auto-login.git
cd rdp-auto-login
npm install
2. 修改配置
编辑 index.js,把用户名密码改成目标账号的:
const protocol = require('./protocol');
const c = protocol.rdp.createClient({
domain : '', // 域用户填域名,本地用户留空
userName : 'your_username', // 改成目标账号
password : 'your_password', // 改成对应密码
enablePerf : true,
autoLogin : true,
decompress : false,
screen : { width : 1920, height : 1200 },
locale : 'en',
logLevel : 'INFO'
}).connect('127.0.0.1', 3389) // 连本机,一般不用改
改完先跑一下验证:
npm run start
控制台打出 connected 就说明成功了。打开任务管理器切到”用户”标签页,应该能看到目标账号已在线。
3. 打包成 exe
生产环境不想装 Node.js,用 pkg 打包成独立可执行文件:
npm install -g pkg
pkg -t node18-win-x64 index.js
mv index.exe RDP-logon.exe
4. 后台静默运行
直接双击 exe 会弹黑框窗口。项目里带了一个 RDP-logon.vbs,用 WScript.Shell 以隐藏窗口方式启动 exe:
objShell.Run """" & exePath & ".exe""" & strArguments, 0, False
' 第二个参数 0 = 隐藏窗口,False = 不等待进程结束
部署步骤:
- 把
RDP-logon.exe和RDP-logon.vbs放同一个目录 Win+R输入shell:startup,打开启动目录- 把
RDP-logon.vbs(或其快捷方式)丢进去
这样每次宿主账号登录时,VBS 会自动在后台把目标账号登上去。
注意事项
- 远程桌面必须开启 — 系统属性 → 远程 → 勾选”允许远程连接到此计算机”,否则 3389 端口没在监听。
- 多用户并发 — Windows Server 天然支持多会话;Win10/11 专业版默认只允许一个远程会话,需要 RDPWrap 之类的工具解除限制,否则新登录会踢掉当前用户。
- 安全性 — 密码明文写在
index.js中,打包后不容易直接看到但也不算安全。如有要求,建议加密或从配置文件读取。
相关链接
PREVIOUSRulEuler:基于 Rete 算法的开源规则引擎