Главная ошибка в автоматизации SFTP - интерактивные ожидания внутри cron/job. Скрипт должен падать сразу, если ключ не подходит, хост неизвестен или удаленный каталог недоступен.
Batch-файл вместо echo-конвейера
Batch-файл проще читать, логировать и переиспользовать. Для атомарной доставки удобно грузить временное имя, а потом делать rename на финальное.
cat > upload.sftp <<'SFTP'
put report.csv report.csv.tmp
rename report.csv.tmp report.csv
SFTP
sftp -b upload.sftp partner@example.com:/incoming/
Host key и права
Known hosts должен быть подготовлен заранее. Отключение проверки host key в обменах с данными почти всегда хуже, чем один раз нормально оформить ключи и доступы.
Проверка после upload
Минимум - код возврата, размер файла на удаленной стороне и запись в журнал обмена. Если файл критичный, добавляют checksum или подтверждение от принимающей системы.