项目场景:
.Net 6使用私钥连接SFTP
问题描述
最近在工作中需要通过给定的私钥连接SFTP,我这边使用了Renci.SshNet来连接,程序报错“Renci.SshNet.Common.SshException:“openssh key type: ssh-rsa is not supported””
原因分析:
报错提示说 ssh-rsa不受支持,随后我在网上找了相关资料也说明了最新的SSH.NET2020.0.0仅支持ssh-ed25519键的OPENSSH格式
解决方案:
通过一下代码将密钥转换为经典的OpenSSH格式,如果密钥没有用密码短语加密,请使用""替代passphrase。
filename :密钥文件名
passphrase:密码短语
ssh-keygen -p -f filename -m pem -P passphrase -N passphrase
连接代如下:
PhysicalFileProvider physical = new PhysicalFileProvider(@"xxxx"); /// xxxx : 存放密钥的文件夹路径
var privateKey = physical.GetFileInfo("xxx.txt").PhysicalPath; /// xxx:密钥文件名
SFtpClient sftp = new(ip, port, username, privateKey, "");
var result= sftp.Connect();