一个 PowerShell SSH 可以不将密钥存储在磁盘上吗?

Posted

技术标签:

【中文标题】一个 PowerShell SSH 可以不将密钥存储在磁盘上吗?【英文标题】:Can one PowerShell SSH without storing key on disk? 【发布时间】:2021-11-25 03:06:57 【问题描述】:

如何在 Azure 中创建从 Windows10 VM 到 RHEL8 VM 的 PowerShell 会话而不将 SSH 密钥存储在磁盘上? 看起来New-PSSession cmdlet 不接受 SSH 密钥作为字符串。

$pssession = New-PSSession -Name RHELSession -HostName <> -Port 22 -Subsystem powershell -UserName <> -KeyFilePath .\<>.pem -SSHTransport
Invoke-Command -Session $pssession -ScriptBlock hostname

一个Get-AzSshKey 或Get-AzKeyVaultSecret 可以在不将.pem 文件存储在磁盘上的情况下从内存中提供密钥吗?

(Get-AzSshKey -ResourceGroupName <> -Name <>).publicKey

【问题讨论】:

SSH.NET 程序集支持从内存中加载密钥。 【参考方案1】:

你是对的,New-PSSession 目前(pwsh v7.1)只允许从文件加载 SSH 密钥。已经有 some requests 添加该功能,但使用 PSSession cmdlet 启动 SSH 会话仍然非常有限。

目前,使用基本的ssh.exe 更直接,应该能够完成您想要的操作。

【讨论】:

感谢您的指出。库中是否有任何其他 cmdlet 可以将密钥作为字符串接受,还是 PowerShell 限制? @AyanMullick Posh-SSH 可能允许字符串值,但我自己没有测试过。大多数只是 Windows OpenSSH 客户端的包装器,它似乎不支持从命令行加载密钥。 它接受密钥作为字符串。但随后也会提示输入密码。 New-SSHSession -ComputerName &lt;&gt; -Port 22 -Credential &lt;&gt; -KeyString $(Get-AzSshKey -ResourceGroupName &lt;&gt; -Name &lt;&gt;).publicKey -AcceptKey 无法正常工作。

以上是关于一个 PowerShell SSH 可以不将密钥存储在磁盘上吗?的主要内容,如果未能解决你的问题,请参考以下文章

ssh密钥讲解

MAC SSH密钥登陆

启动 Pageant SSH-Agent 并加载文件夹中的所有密钥

在 powershell 中生成 RSA 密钥对

ssh 密钥密码在 Windows 中有效,但在 linux 中无效

在Powershell中,如何设置$?不将此值发送到管道?