psftp -b параметр не работает: Фатальная ошибка: не удалось открыть

Вопрос или проблема

[перенесено с StackOverflow]

Мы используем PSFTP вместе с ppk-файлом и командным файлом для загрузки CSV на удаленный SFTP-хост. Это работало много (много) месяцев, и только недавно параметр -b стал выдавать ошибку “Fatal: unable to open”.

Детали:
Мы запускаем PSFTP.exe на Windows с использованием пакетного файла или командной строки.

Командный файл, который мы передаем с параметром -b, называется “sftpcommands.txt” и содержит следующие строки:

put "D:\batch\Upload.csv"
quit

Вот что мы запускаем из пакетного файла или командной строки:

psftp.exe -v -P 22 -i D:\batch\keyfile.ppk -b D:\batch\sftpcommands.txt [email protected]

Вот результат:

Ищем хост "SFTPHost.domain.com" для SSH соединения
Подключение к hostIP, порт 22
Наш клиент утверждает: SSH-2.0-PuTTY_Release_0.82
Подключено к hostIP (с localIP:35022)
Удаленная версия: SSH-2.0-AWS_SFTP_1.1
Используем SSH протокол версии 2
Нет доступного контекста безопасности GSSAPI
Выполняем ECDH обмен ключами с кривой nistp256, используя хэш SHA-256 (ускорено SHA-NI)
Отпечаток ключа хоста:
ssh-rsa 4096 SHA256:ajIF+и_другие_данные
Инициализация AES-256 SDCTR (ускорено AES-NI) для исходящей шифрации
Инициализация HMAC-SHA-256 (ускорено SHA-NI) для исходящего MAC алгоритма
Инициализация AES-256 SDCTR (ускорено AES-NI) для входящей шифрации
Инициализация HMAC-SHA-256 (ускорено SHA-NI) для входящего MAC алгоритма
Чтение файла ключа "D:\batch\keyfile.ppk"
Используем имя пользователя "OurUser".
Предложен открытый ключ
Предложение открытого ключа принято
Аутентификация с открытым ключом "информация_о_ключе"
Отправлена подпись открытого ключа
Доступ предоставлен
Открытие главного канала сессии
Удаленное отладочное сообщение: SFTP: ключевые опции: пересылка агентов пересылка портов pty user-rc пересылка x11
Удаленное отладочное сообщение: SFTP: ключевые опции: пересылка агентов пересылка портов pty user-rc пересылка x11
Открыт главный канал
Запуск оболочки/команды
Подключено к some-host.server.transfer.us-east-1.amazonaws.com
Удаленная рабочая директория —
Fatal: unable to open
Сессия отправлена со статусом 0
Главный канал сессии закрыт
Все каналы закрыты

Теперь странная часть: мы можем отказаться от синтаксиса скрипта -b и вручную ввести те же команды, которые находятся в файле sftpcommands.txt, когда появляется приглашение psftp> (например):

psftp.exe -v -P 22 -i D:\batch\keyfile.ppk [email protected]

Ищем хост "SFTPHost.domain.com" для SSH соединения
Подключение к hostIP, порт 22
Наш клиент утверждает: SSH-2.0-PuTTY_Release_0.82
Подключено к hostIP (с localIP:35022)
Удаленная версия: SSH-2.0-AWS_SFTP_1.1
Используем SSH протокол версии 2
Нет доступного контекста безопасности GSSAPI
Выполняем ECDH обмен ключами с кривой nistp256, используя хэш SHA-256 (ускорено SHA-NI)
Отпечаток ключа хоста:
ssh-rsa 4096 SHA256:ajIF+и_другие_данные
Инициализация AES-256 SDCTR (ускорено AES-NI) для исходящей шифрации
Инициализация HMAC-SHA-256 (ускорено SHA-NI) для исходящего MAC алгоритма
Инициализация AES-256 SDCTR (ускорено AES-NI) для входящей шифрации
Инициализация HMAC-SHA-256 (ускорено SHA-NI) для входящего MAC алгоритма
Чтение файла ключа "D:\batch\keyfile.ppk"
Используем имя пользователя "OurUser".
Предложен открытый ключ
Предложение открытого ключа принято
Аутентификация с открытым ключом "информация_о_ключе"
Отправлена подпись открытого ключа
Доступ предоставлен
Открытие главного канала сессии
Удаленное отладочное сообщение: SFTP: ключевые опции: пересылка агентов пересылка портов pty user-rc пересылка x11
Удаленное отладочное сообщение: SFTP: ключевые опции: пересылка агентов пересылка портов pty user-rc пересылка x11
Открыт главный канал
Запуск оболочки/команды
Подключено к some-host.server.transfer.us-east-1.amazonaws.com
Удаленная рабочая директория —
psftp> put "D:\batch\Upload.csv"
local:D:\batch\Upload.csv => remote:/Upload.csv
psftp> quit
Сессия отправлена со статусом 0
Главный канал сессии закрыт
Все каналы закрыты

Сторонняя организация переместила серверы SFTP несколько месяцев назад, но, насколько мне известно, параметр -b все равно работал на их новом хосте (однако я могу ошибаться).

Насколько мне известно, на нашей стороне ничего не изменилось, и, как указано, мы проводим A/B тестирование с тем же локальным пользователем Windows, теми же локальными файлами и т.д. Не должно быть никаких проблем с локальными правами, так как, опять же, мы используем Windows, и учетная запись, на которой выполнен вход, открывает/редактирует/доступна ко всем вовлеченным файлам. Я также пробовал перемещать параметр -b на разные позиции в строке команды.

Может ли эта ошибка быть вызвана настройками безопасности, конфигурации или формата на удаленном SFTP-сервере, вызывающими путаницу с файлом команд -b?

Примечание: у меня открыт тикет с операторами удаленного SFTP-хоста для выяснения проблемы, и если я найду решение, я размещу ответ здесь в случае, если это поможет кому-то еще, кто видит “Fatal: unable to open” на переключателе -b.

Ответ или решение

Теория

Проблема с параметром -b в PSFTP, который выдает ошибку "Fatal: unable to open", может быть вызвана несколькими факторами, связанными как с локальной системой, так и с удаленным сервером SFTP. PSFTP, представляющее собой утилиту для передачи файлов по протоколу SFTP, полагается на корректное выполнение скриптовых команд, что определяется содержанием и доступностью файла команд. Ошибка указывает на то, что PSFTP не может открыть этот файл, и причины могут варьироваться от проблем с правами доступа в локальной системе до измененных настроек удаленного сервера.

Пример

В данной ситуации вы используете PSFTP для автоматизированной загрузки файлов на удаленный SFTP-сервер с помощью команды -b, которая позволяет исполнять команды из указанного текстового файла, в данном случае sftpcommands.txt. Эта схема работала на протяжении длительного времени, однако с недавних пор возникла ошибка. Воспроизвести команду вручную удалось без проблем, что указывает на успешное соединение и авторизацию на сервере, а также правильность команд в файле.

Применение

  1. Проверка прав доступа и наличия файла:

    • Убедитесь, что файл sftpcommands.txt находится по указанному пути D:\batch\ и доступен для чтения. Проверьте права доступа на этот файл, а также на директорию, в которой он находится.
  2. Форматирование файла:

    • Проверьте файл на наличие скрытых символов или ошибок в кодировке. Файл должен быть в текстовом формате без BOM (Byte Order Mark), лучше всего создавать его в текстовом редакторе без дополнительных форматирований.
  3. Проверка пути к файлу:

    • Убедитесь, что путь D:\batch\sftpcommands.txt указан правильно, особенно если выполняете скрипт от другого пользователя или с другой директории. Попробуйте использовать абсолютные пути без кавычек или проверяющиеся через различные средовые UAC/групповые политики.
  4. Проверка PSFTP:

    • Проверьте версию PSFTP. Возможно, обновление утилиты или откат до предыдущей версии поможет, если изменения в поведении связаны с обновлением программы.
  5. Изменения на удаленном сервере:

    • Хотя смена сервера на стороне SFTP-провайдера не должна влиять на локальное исполнение командного файла, изменения в конфигурации нового сервера (например, фильтрация команд или изменения в поддержке sftp-протоколов) потенциально могут вызвать такие проблемы. Убедитесь в том, что на новом сервере нет настройкой, которые влияют на чтение батч-файлов.
  6. Журналирование и логирование:

    • Используйте более подробное логирование, чтобы получше разобраться в проблеме. Добавьте опции -v для детализированного вывода, чтобы выявить дополнительные строки журнала, которые могут указать на точную причину сбоя.
  7. Контекстные ошибки:

    • Проверьте системный лог Windows на наличие ошибок или предупреждений, связанных с выполнением скриптов или доступностью директории.
  8. Обратная связь с провайдером:

    • Поддерживайте контакт с администраторами удаленного сервера о возможных изменениях в их конфигурации. Они могли внедрить новые политики безопасности, которые влияют на работу с командными файлами.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...