本地PowerShell调用Azure Ubuntu虚拟机中Ansible时凭据获取失败
解决PowerShell调用New-SSHSession连接Azure Ubuntu虚拟机时的凭据错误问题
我来帮你排查这个凭据获取失败的问题——毕竟直接用Bitwise这类SSH工具能正常连接,但PowerShell里就报错,大概率是参数配置、密钥格式或者模块用法的小问题,咱们一步步来捋:
1. 先把密钥文件的问题确认清楚
- 首先确保
-KeyFile的路径是完整且正确的,PowerShell里路径如果包含空格或者特殊字符,一定要用双引号括全,比如"C:\Users\Reza\.ssh\id_rsa",别只写半截路径。 - 另外,Azure Ubuntu虚拟机默认兼容OpenSSH格式的私钥,如果你用的是PuTTY生成的
.ppk格式,得先转换成OpenSSH格式(用PuTTYgen工具导出成「OpenSSH私钥」即可),不然PowerShell的SSH模块识别不了。
2. 纠正-Credential参数的用法
你直接写-Credential ubuntu是不对的,PowerShell的-Credential参数需要的是一个PSCredential对象,不是单纯的用户名。正确的用法分两种:
- 方式一:先创建凭据对象再调用命令
# 会弹出窗口让你输入ubuntu用户的密码 $cred = Get-Credential -UserName ubuntu New-SSHSession -ComputerName "13.**.**.***" -Credential $cred -KeyFile "C:\Users\Reza\.ssh\your_private_key" - 方式二:如果想用密钥登录,其实可以跳过
-Credential,直接指定用户名+密钥:New-SSHSession -ComputerName "13.**.**.***" -UserName ubuntu -KeyFile "C:\Users\Reza\.ssh\your_private_key"
3. 检查Azure虚拟机的SSH服务配置
登录到Ubuntu虚拟机里,确认SSH服务的配置没问题:
- 打开
/etc/ssh/sshd_config文件,确保PubkeyAuthentication yes(允许公钥登录)和PasswordAuthentication yes(如果需要密码辅助的话)这两项是开启的,注释掉的话去掉前面的#。 - 修改后重启SSH服务生效:
sudo systemctl restart sshd
4. 用测试命令定位问题根源
先试试用更轻量化的测试命令排查,比如:
Test-SSHConnection -ComputerName "13.**.**.***" -UserName ubuntu -KeyFile "C:\Users\Reza\.ssh\your_private_key"
这个命令会返回具体的连接状态,能帮你快速判断是密钥无效、网络不通还是权限问题。
5. 更新PowerShell的SSH模块
如果你用的是Posh-SSH模块,旧版本可能存在兼容性问题,建议更新到最新版:
# 先确保模块已安装 Install-Module -Name Posh-SSH -Force # 更新到最新版本 Update-Module -Name Posh-SSH
按照上面的步骤排查下来,应该能解决凭据获取失败的问题。
内容的提问来源于stack exchange,提问作者Reza Amya
相关产品推荐
相关产品推荐

