在PowerShell中自动向SSH会话传递密码至本地Hyper-V虚拟机
解决PowerShell中SSH自动传递密码到Hyper-V虚拟机的问题
为什么你的原有命令失败
OpenSSH官方的ssh.exe并不支持-Credential参数——这个参数是PowerShell原生Cmdlet(比如Invoke-Command)特有的,直接在ssh.exe后添加会触发参数错误,导致连接失败。
可行方案(无需额外安装工具)
方案1:利用预装的MobaXterm命令行模式
MobaXterm的命令行工具支持直接通过参数传递SSH密码,语法简单且无需额外配置:
$User = "你的用户名" $Password = "你的密码" $ComputerName = "虚拟机IP或主机名" $Command = "要执行的远程命令" # 执行单条远程命令 & "C:\Program Files (x86)\Mobatek\MobaXterm\MobaXterm.exe" -exec "ssh $User@$ComputerName -pw $Password $Command" # 启动交互式SSH会话 & "C:\Program Files (x86)\Mobatek\MobaXterm\MobaXterm.exe" -exec "ssh $User@$ComputerName -pw $Password"
注意:如果MobaXterm安装在非默认路径,请自行调整执行文件的路径。
方案2:PowerShell管道传递密码给ssh.exe
OpenSSH的ssh.exe支持通过标准输入接收密码,结合-o BatchMode=no参数关闭批量模式即可实现自动输入:
$User = "你的用户名" $Password = "你的密码" $ComputerName = "虚拟机IP或主机名" $Command = "要执行的远程命令" # 执行单条命令 echo $Password | ssh.exe -o BatchMode=no $User@$ComputerName $Command # 启动交互式会话(注意:密码可能被进程工具捕获,安全性较低) echo $Password | ssh.exe -o BatchMode=no $User@$ComputerName
警告:这种方式会明文传递密码,存在安全风险,仅建议在测试环境临时使用。
方案3:SSH密钥认证(推荐,安全无密码)
如果项目安全策略允许,密钥认证是最优解,无需传递任何密码:
- 本地生成密钥对:
ssh-keygen.exe -t ed25519
按提示一路回车使用默认配置即可。
2. 将公钥复制到虚拟机的授权列表:
ssh-copy-id $User@$ComputerName
首次执行会要求输入一次密码,之后即可无密码登录:
ssh.exe $User@$ComputerName $Command
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

