使用 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 加密私钥连接到远程主机不起作用

Windows下生成 公钥 私钥以及 配置 Filezilla中的 SFTP的私钥

SSH 使用公钥(不是私钥)进行身份验证

ssh及sftp配置

ssh连接的时候客户端的公钥存在服务端的啥地方?

如何实现shell脚本使用sftp的用户名密码自动登录,而不使用公钥