我目前正在开发一个需要 SSH 库的小型 Visual C# 应用程序。我已经尝试过 DotNetSSH、Renci.SshNet 和 SharpSsh。Granados SSH 库的文档很差(至少我几乎没有发现),所以我跳过了这个。
所有这些库都有一个大问题(恕我直言):它们无法使用密码打开 SSH 私钥。
Renci.SshNet 不支持 AES。DotNetSSH 和 SharpSsh 使用 jsch(java ssh 库)作为基础,并且似乎存在错误(?),因此它不会解密私钥并不断询问密码。
使用用户名+密码和没有密码短语的私钥连接非常适合 SharpSsh。
有人已经遇到过同样的问题吗?或者是否有另一个支持“RSA 私钥和密码”的 C# SSH 库?
提前谢谢
我已成功使用SSH.NET开源库来处理 SSH 和 SFTP。
这是使用密钥文件 + 密码进行连接的代码。
public void Connect(string host, int port, string user, string passPhrase, string privateKeyFilePath) {
var keyFiles = new[] { new PrivateKeyFile(privateKeyFilePath, passPhrase) };
var methods = new List<AuthenticationMethod>();
methods.Add(new PasswordAuthenticationMethod(user, passPhrase));
methods.Add(new PrivateKeyAuthenticationMethod(user, keyFiles));
var con = new ConnectionInfo(host, port, user, methods.ToArray());
var client = new SshClient(con);
client.Connect();
// create an xterm shell
var Shell = client.CreateShellStream("xterm", 80, 24, 800, 600, 1024);
// for reading & writing to the shell
var reader = new StreamReader(Shell);
var writer = new StreamWriter(Shell);
// ....
client.Disconnect();
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的私钥文件必须是 OpenSSH 格式。如果在 Notepad++ 中打开密钥文件,第一行必须有“BEGIN RSA PRIVATE KEY”。
如果没有,则使用 puttygen 将您的私钥文件转换为 OpenSSH 格式。