使用 SSH 公钥/私钥连接到 sFTP 服务器。错误 Invalid private key file. 使用 SSH.NET
Posted
技术标签:
【中文标题】使用 SSH 公钥/私钥连接到 sFTP 服务器。错误 Invalid private key file. 使用 SSH.NET【英文标题】:Connectig to sFTP Server using SSH public/private key. Error Invalid private key file. Using SSH.NET使用 SSH 公钥/私钥连接到 sFTP 服务器。错误 Invalid private key file. 使用 SSH.NET 【发布时间】:2021-10-18 04:49:56 【问题描述】:首先我使用生成的密钥
var keygen = new SshKeyGenerator.SshKeyGenerator(2048);
var privateKey = keygen.ToPrivateKey();
var publicSshKey = keygen.ToRfcPublicKey();
私钥生成以下字符串:
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBA... etc.
-----END RSA PRIVATE KEY-----
我现在正在尝试创建一个新的 Renci.SshNet.PrivateKeyFile 对象以用于创建 SftpClient 对象。我尝试以多种方式加载 RSA 私钥字符串:
using (var keyStream = new MemoryStream(Encoding.ASCII.GetBytes(ReturnKey())))
var privateKy = new PrivateKeyFile(keyStream);
ReturnKey() 方法只返回一个私钥字符串 -----BEGIN RSA PRIVATE KEY----- 等。我尝试过使用和不使用“-----BEGIN RSA 和 - ----End RSA" 我得到了同样的结果:
错误无效的私钥文件。
我拥有连接到 sFTP 服务器的所有详细信息,即用户、DNS、端口、路径。生成了公钥,我只是无法加载私钥作为开始。
这是我第一次不得不使用 SSH 连接到 sFTP。任何帮助将不胜感激,谢谢。
【问题讨论】:
请edit您的问题显示您程序中的所有相关代码,特别是产生错误的代码。理想情况下,您应该发布一个完整、简单的程序来演示问题。new PrivateKeyFile(new MemoryStream(Encoding.ASCII.GetBytes(new SshKeyGenerator.SshKeyGenerator(2048).ToPrivateKey())))
不会对我抛出任何异常(我使用了 NuGet 包 SshKeyGenerator 1.1.40 和 SSH.NET 2020.0.1)。
@MartinPrikryl 这也对我有用,所以它一定是我存储私钥并重新使用它的方式,我会先尝试一些事情。
@Kenster 公平点,我将添加所有相关代码。
【参考方案1】:
看起来这是我添加私钥文本的方式;相反,我将密钥保存到 txt 文件并直接加载。我认为 ReturnKey() 函数的字符串中可能还有其他字符、制表符/回车符,所以如果我添加完整代码会有所帮助。
【讨论】:
以上是关于使用 SSH 公钥/私钥连接到 sFTP 服务器。错误 Invalid private key file. 使用 SSH.NET的主要内容,如果未能解决你的问题,请参考以下文章
使用 ansible-vault 加密私钥连接到远程主机不起作用