powershell - 如何使用 ssh 和 PowerShell 中的私钥连接到 linux 服务器?

标签 powershell ssh powershell-5.0

我已经使用 puttygen 生成了一个 ssh key 对,并且可以在我的 Windows 10 工作站上使用来自 putty 的私钥成功连接到我的 CentOS 服务器:

image of successful connection to CentOS

我想从 Windows PowerShell 连接到服务器并使用 Install-Module posh-ssh 加载 Posh-SSH 模块

我试图创建一个新的 ssh session :

$Credential = Get-Credential
$KeyFile = 'C:\Users\mark\Documents\ssh\privkey.ppk'
$sesh = New-SSHSession -ComputerName neon.localdomain -Credential $credential -Keyfile $KeyFile

我为 Get-Credential 输入了 root 和空白密码但我收到此错误:

New-SSHSession : Invalid private key file.



我试图通过读取它并转换为base64编码将privkey文件转换为字符串,但我得到了同样的错误:
$privkeyString = Get-Content $KeyFile
$Bytes = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($privkeyString))
$sesh = New-SSHSession -ComputerName neon.localdomain -Credential $credential -KeyString $Bytes

我也试过这个但得到同样的错误:
$sesh = New-SSHSession -ComputerName neon.localdomain -Credential $credential -KeyString $privkeystring

关于如何使用带有私钥文件的 PowerShell 连接到 linux 服务器的任何想法?

最佳答案

New-SSHSession无法识别 PuTTY 的 key 格式(不幸的是,画廊和项目页面都没有提到这一点,但我在 PowerShellMagazine article 中找到了它)。您需要 OpenSSH 格式的私钥。您可以convert the private key使用 PuTTYgen:

  • 单击文件 → 加载私钥。
  • 如果 key 受密码保护,请输入密码。
  • 单击转换 → 导出 OpenSSH key 。
  • 输入导出 key 的文件名(不要覆盖 PPK 文件),然后单击保存。
  • 退出 PuTTYgen。

  • 运行New-SSHSession使用新的 key 文件:
    $computer = 'neon.localdomain'
    $username = 'foo'
    $keyfile  = 'C:\path\to\priv_openssh.key'
    
    $sess = New-SSHSession -Computer $computer -Credential $username -Keyfile $keyfile
    

    关于powershell - 如何使用 ssh 和 PowerShell 中的私钥连接到 linux 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46388010/

    相关文章:

    powershell - 如何在开始时打开 ISE 中最后打开的文件

    Powershell 代码在从文本文件读取每个值后打印/换行

    java - 无法在 powershell 中设置正确的编码

    windows - 我们如何在 PowerShell 5.0 中通过标签获取驱动器?

    powershell - Powershell-显示清理(get-filehash结果为.txt文件)

    git - 如何从 Bitbucket 存储库推送到 Azure 存储库,不同的用户电子邮件

    linux - 在 Linux 上安装 ElasticSearch

    linux - 尝试通过 SSH 保留进程失败

    powershell - 如何在 Windows 10 上的 PowerShell 中创建文件硬链接(hard link)?

    powershell - 当字符串中给出 SAMAccountName 时,Get-ADObject -Identity 找不到对象 - 为什么?