Глядя на ваш код, у вас есть две проблемы.
Если вы вызываете get () только с одним аргументом, он возвращает буфер, а не файл. Чтобы получить файл, просто выполните
client.get (sourceFilePath, localFilePath)
, и файл будет сохранен локально как localFilePath
. Оба аргумента являются строками и должны быть полными путями, т.е. включать имя файла, а не только каталог. Имя файла для второго аргумента может отличаться от первого. Однако, если все, что вам нужно - это извлечь файл, лучше использовать fastGet()
, а не get()
. Метод get () подходит для случаев, когда вы хотите что-то сделать в коде с данными, например, в буфере или конвейере / обработке потока записи. Метод fastGet () работает быстрее, чем get (), поскольку он выполняет передачу с использованием параллельных процессов, но не позволяет использовать буферы или потоки для дальнейшей обработки.
Сообщение об ошибке, которое вы видите, связано либо с тем, как вы вызываете get (), либо с указанием того, что у вас нет разрешения на чтение файла, к которому вы пытаетесь получить доступ (как пользователь, с которым вы связаны). Самый простой способ проверить это - использовать программу openSSH sftp (доступную в Linux, mac и windows) и ключ, который вы используете (используйте ключ -i), чтобы попытаться загрузить файл. Если это происходит с ошибкой разрешения, то вы знаете, что это ошибка разрешения, а не проблема с вашим кодом или модулем ssh2-sftp-client.
РЕДАКТИРОВАТЬ: Я только что заметил, что вы также используете как пароль, так и файл ключа. Вам не нужно и то и другое - любой из них будет работать, но вам не нужно использовать оба. Я стараюсь использовать ключевой файл, когда это возможно, так как во избежание необходимости где-то хранить пароль. Убедитесь, что вы не добавили ключевую фразу к своему ключу. Кроме того, вы можете использовать что-то вроде модуля dotenv
и хранить свои учетные данные и другие настройки в файле .env, который вы не проверяете в системе контроля версий.