C # SFTP Нет такого файла

Я использую библиотеку SSH.NET для подключения к удаленному серверу SFTP. Я пытаюсь использовать очень простой код, но он не работает

using (var client = new SftpClient(host, username, password))
{
    client.Connect();   
    client.ChangeDirectory(@"sftp://server.example.com/other_directory");
}

Однако это вызывает исключение No Such File в методе ChangeDirectory.

Я попробовал то же самое с Curl, но получил сообщение об ошибке

curl: (51) Сертификат узла SSL или удаленный ключ SSH не в порядке

Однако я добавил аргумент curl --insecure, и все заработало.

Может ли часть --insecure быть связана с тем, почему библиотека SSH.NET не работает, или есть другая причина? Есть ли способ смоделировать то, что --insecure делает на C #?

Спасибо


person TryNCode    schedule 01.04.2016    source источник
comment
Мне кажется, sftp://server.example.com/ лишает вас безопасного соединения. Так что это может быть проблема конфигурации, а не все, что вы делаете неправильно на стороне клиента.   -  person Max Sorin    schedule 01.04.2016
comment
Сначала я подумал, что это может быть так, но я могу получить к нему доступ через curl и другие сторонние инструменты на моем компьютере, поэтому я решил, что это будет на моей стороне?   -  person TryNCode    schedule 01.04.2016
comment
Захватывайте данные с помощью сниффера, такого как wirehark или fiddler, и сравнивайте результаты между работающими и неработающими приложениями. Обычно проблема заключается в различии заголовков html.   -  person jdweng    schedule 01.04.2016
comment
@jdweng Отличная идея, спасибо!   -  person TryNCode    schedule 01.04.2016
comment
Исправлено, ответ опубликован ниже   -  person TryNCode    schedule 01.04.2016


Ответы (2)


Если кто-то еще столкнется с этой проблемой, окажется, что любой из методов, таких как ChangeDirectory и UploadFile, ожидает путь относительно свойства WorkingDirectory. В результате я исправил свою проблему, изменив ее на

client.ChangeDirectory(@"/other_directory");

Надеюсь, что это поможет кому-то другому

person TryNCode    schedule 01.04.2016
comment
/other_directory - это абсолютный, а не относительный путь. Дело в том, что для методов требуются пути, но вместо этого вы указали URL-адрес. - person Martin Prikryl; 12.04.2016
comment
Я думал, это относительный путь? Это относительно рабочего каталога coffeecup.com/help/articles/absolute -vs-relative-pathslinks - person TryNCode; 20.05.2016
comment
Эта статья неверна. В нем указаны пути, но на самом деле речь идет об URL-адресах. Здесь мы говорим о путях, а не об URL-адресах. Путь относительно рабочего каталога не может начинаться с косой черты. - person Martin Prikryl; 20.05.2016

В моем случае проблема заключалась в разрешениях для имени пользователя. var client = new SftpClient (хост, имя пользователя, пароль)

Таким образом, имя пользователя должно иметь необходимые разрешения для папки other_directory, чтобы следующий код работал правильно.

client.ChangeDirectory(@"/other_directory");
person VivekDev    schedule 20.03.2021