You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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密钥对:

  1. 在本地生成SSH密钥(用ssh-keygen命令,一路回车即可);
  2. 将公钥上传到目标服务器的~/.ssh/authorized_keys文件中;
  3. 之后你用ssh user@ip -p port连接时,就不需要输入密码了,直接就能登录。

这种方式既不需要模拟输入,又更安全,如果你能修改服务器配置的话,优先推荐这种方案。


内容的提问来源于stack exchange,提问作者danilo

火山引擎 最新活动