Ответ 1
Итак, ответ на мою проблему заключается в том, что это не сервер sftp. Это был простой FTP-сервер, поэтому я просто использовал webrequest.
Проверьте, что сервер на самом деле является сервером sftp.
Это мой код с использованием SSH.NET
using (var sftp = new SftpClient(host, username, password))
{
sftp.Connect();
}
Он работает на SFTP, установленном на моем локальном компьютере, но когда я указываю его на реальном SFTP-сервере от клиента, я получаю Renci.SshNet.Common.SshAuthenticationException: для проверки подлинности не найдено подходящего метода аутентификации.
Я не могу найти документацию о том, какие методы проверки подлинности я должен использовать, а в файле Zilla простое имя пользователя и пароль делают трюк.
Кто-нибудь может посоветовать?
Итак, ответ на мою проблему заключается в том, что это не сервер sftp. Это был простой FTP-сервер, поэтому я просто использовал webrequest.
Проверьте, что сервер на самом деле является сервером sftp.
Я нашел ответ (по крайней мере, для моей проблемы, которая, похоже, совпадает с запрошенной операцией):
Мне пришлось изменить аутентификацию на KeyboardInteractiveAuthenticationMethod
Итак, теперь это работает:
KeyboardInteractiveAuthenticationMethod keybAuth = new KeyboardInteractiveAuthenticationMethod(SFTP_USR);
keybAuth.AuthenticationPrompt += new EventHandler<AuthenticationPromptEventArgs>(HandleKeyEvent);
ConnectionInfo conInfo = new ConnectionInfo(SFTP_HST, SFTP_PRT, SFTP_USR, keybAuth);
using (SftpClient sftp = new SftpClient(conInfo))
{
sftp.Connect();
// Do SFTP Stuff, Upload, Download,...
sftp.Disconnect();
}
HandleKeyEvent
затем передает пароль:
private void HandleKeyEvent(object sender, AuthenticationPromptEventArgs e)
{
foreach (AuthenticationPrompt prompt in e.Prompts)
{
if (prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) != -1)
{
prompt.Response = SFTP_PWD;
}
}
}