如何在VBS脚本中通过PowerShell自动发送SSH密码实现自动连接
解决VBS脚本中通过PowerShell自动发送SSH密码的问题
首先得明确:你之前尝试的在命令行后拼接密码的方式行不通,因为ssh.exe的密码提示是交互式输入,它不会读取命令行参数或者后续的命令输出作为密码——那些写法都是在ssh命令执行结束后才输出密码,自然不会被ssh捕获。
下面给你两种可行的方案,适配你需要保留VBS脚本、通过PowerShell启动ssh的需求:
方案一:用WScript.Shell的SendKeys模拟键盘输入
这是最直接适配你现有VBS逻辑的方法,通过模拟手动输入密码的动作来自动填充:
Set objShell = CreateObject("Wscript.Shell") ' 启动PowerShell并执行ssh连接命令,1表示显示窗口,False表示不等待命令执行完成 objShell.Run "powershell -noexit ssh.exe " & user & "@" & ip & " -p " & port, 1, False ' 等待2秒(可根据你的机器速度调整,确保ssh加载到密码提示界面) WScript.Sleep 2000 ' 激活PowerShell窗口(避免密码发送到其他窗口) objShell.AppActivate "Windows PowerShell" ' 如果是PowerShell Core,标题可能是"PowerShell" ' 发送密码+回车,完成输入 objShell.SendKeys pass & "{ENTER}"
注意事项:
WScript.Sleep的时间需要根据实际情况调整,如果你的机器启动ssh较慢,就调大数值(比如3000表示3秒);AppActivate的窗口标题要对应你的PowerShell版本,比如新版Windows Terminal里的PowerShell标题可能不同,你可以打开PowerShell看一下窗口标题再修改;- 这种方式依赖窗口激活状态,如果脚本运行时其他窗口抢占焦点,可能会导致密码发送错误,所以尽量确保脚本运行时没有其他窗口干扰。
方案二:改用SSH密钥对(更安全的替代方案)
虽然你要的是自动发送密码,但还是要提醒:存储明文密码在脚本里是非常不安全的操作。更稳妥的方式是配置SSH密钥对:
- 在本地生成SSH密钥(用
ssh-keygen命令,一路回车即可); - 将公钥上传到目标服务器的
~/.ssh/authorized_keys文件中; - 之后你用
ssh user@ip -p port连接时,就不需要输入密码了,直接就能登录。
这种方式既不需要模拟输入,又更安全,如果你能修改服务器配置的话,优先推荐这种方案。
内容的提问来源于stack exchange,提问作者danilo




