PowerShell脚本绕过Plink首次主机密钥验证遇错求助
解决Plink主机密钥验证错误&内网通用SSH连接脚本方案
一、报错原因分析
你遇到的Host key did not appear in manually configured list错误,是因为指定的主机密钥指纹格式有误(末尾多余冒号),且-batch参数会强制拒绝未知主机密钥。结合内网环境需求,直接绕过首次主机密钥验证是更高效的方案。
二、修正后的Plink脚本(绕过验证)
$ipAddress = "10.10.10.10" # 读取用户名/密码,去除文件末尾换行符 $username = Get-Content -Path "你的用户名文件路径" -Raw | TrimEnd $password = Get-Content -Path "你的密码文件路径" -Raw | TrimEnd $plinkPath = "C:\Program Files\PuTTY\plink.exe" # 用-hostkey * 匹配任意主机密钥,内网可信环境下安全可用 # 直接调用plink,避免Invoke-Expression的安全风险 & $plinkPath -batch -ssh -hostkey * "$username@$ipAddress" -pw $password
关键优化点:
- 替换错误的固定主机密钥为
-hostkey *,直接跳过首次验证和指纹检查 - 用
&直接执行Plink,替代风险较高的Invoke-Expression - 读取文件时添加
-Raw和TrimEnd,避免换行符混入用户名/密码
如果需严格验证主机密钥,先执行plink.exe -ssh $username@$ipAddress获取正确的MD5指纹(首次连接时会显示),替换-hostkey *为完整指纹即可(注意不要有多余冒号)。
三、OpenSSH替代方案(原生无额外工具)
如果内网已启用OpenSSH客户端,可用原生命令实现,绕过验证的参数为StrictHostKeyChecking=no:
$ipAddress = "10.10.10.10" $username = Get-Content -Path "你的用户名文件路径" -Raw | TrimEnd # 优先推荐密钥登录(无需明文密码) ssh.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ` "$username@$ipAddress" -i "你的私钥文件路径"
注:OpenSSH默认不支持明文密码参数,内网环境建议用SSH密钥对替代密码登录,更安全且无需存储明文。
四、内网通用优化建议
- 参数化脚本:让用户可灵活传入IP、路径等参数
param( [Parameter(Mandatory=$true)] [string]$IpAddress, [string]$UsernamePath = "默认用户名文件路径", [string]$PrivateKeyPath = "默认私钥路径" ) $username = Get-Content -Path $UsernamePath -Raw | TrimEnd & "C:\Program Files\PuTTY\plink.exe" -batch -ssh -hostkey * "$username@$IpAddress" -i $PrivateKeyPath
- 错误处理:添加异常捕获,方便排查问题
try { & $plinkPath -batch -ssh -hostkey * "$username@$ipAddress" -pw $password if ($LASTEXITCODE -ne 0) { throw "连接失败,Plink退出码:$LASTEXITCODE" } } catch { Write-Error "连接出错:$_" }
- 替代明文密码:引导内网用户生成SSH密钥对,将公钥上传至远程设备,脚本用
-i参数指定私钥即可免密登录。
内容的提问来源于stack exchange,提问作者meta
相关产品推荐
相关产品推荐

