无密码虚拟机能否通过PSSession建立连接?
无密码虚拟机通过PowerShell Direct建立PSSession的解决办法
首先明确:默认情况下,PowerShell Direct(通过VMName参数创建PSSession)不支持空密码的本地账户登录——这不是PowerShell Direct本身的限制,而是Windows默认安全策略禁止空密码账户通过网络(包括虚拟机内部的PowerShell Direct通道)做身份验证。
要实现无密码连接,有两种可行方案:
方案1:修改虚拟机本地安全策略(快速但降低安全性)
在虚拟机内部操作:
- 打开本地安全策略:运行
secpol.msc - 依次展开 本地策略 > 安全选项
- 找到 账户:使用空密码的本地账户只允许进行控制台登录 这条策略
- 把它改成 已禁用
- 要么重启虚拟机,要么执行
gpupdate /force让策略立即生效
改完之后,用空密码凭证就能连接了:
# 创建空密码的SecureString $emptyPwd = [System.Security.SecureString]::new() $cred = [System.Management.Automation.PSCredential]::new("AdminUser", $emptyPwd) # 建立PSSession $s = New-PSSession -VMName "vm-240404" -Credential $cred
方案2:用证书认证(更安全)
如果不想放宽安全策略,推荐用证书做身份验证:
- 在虚拟机里给目标用户生成自签名证书:
$cert = New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My -Subject "CN=AdminUser" -KeySpec KeyExchange # 导出证书到桌面(方便主机导入) Export-Certificate -Cert $cert -FilePath "$env:USERPROFILE\Desktop\vm-admin-cert.cer"
- 在虚拟机里注册绑定证书的会话配置:
# 示例SDDL允许管理员组访问,可按需调整权限 Register-PSSessionConfiguration -Name "CertAuthSession" -SecurityDescriptorSddl "O:NSG:BAD:P(A;;GA;;;BA)" -CertificateThumbprint $cert.Thumbprint
- 在主机上导入证书并创建会话:
# 导入证书到受信任的人存储 Import-Certificate -FilePath "C:\Users\YourUser\Desktop\vm-admin-cert.cer" -CertStoreLocation Cert:\CurrentUser\TrustedPeople # 创建凭证(密码留空) $cred = [System.Management.Automation.PSCredential]::new("AdminUser", [System.Security.SecureString]::new()) # 通过证书认证的会话配置连接 $s = New-PSSession -VMName "vm-240404" -Credential $cred -ConfigurationName "CertAuthSession" -UseSSL
补充说明
- 方案1仅适合测试环境或完全隔离的内部环境,空密码本身存在安全风险,放宽策略会进一步扩大风险边界。
- 官方文档未明确提及空密码支持,是因为这属于Windows本地安全策略范畴,不属于PowerShell Direct的功能限制。
内容的提问来源于stack exchange,提问作者citelao
相关产品推荐
相关产品推荐

