lftp, stdout, stderr и SAP exec_protocol

У нас есть сценарии linux для выполнения SFTP через общие ключи, но в последнее время поставщик требует ключ и пароль, я думаю, это похоже на двухфакторную аутентификацию. Таким образом, поставщик аутентифицируется с помощью предварительного ключа, а затем запрашивает пароль. Пока пароль не будет введен, вы аутентифицированы лишь частично. Так что мои стандартные скрипты не работают. Чтобы обойти это, я обнаружил, что lftp может передавать пароль в сценарии и решает проблему написания сценария для размещения и получения файла. Вот мой сценарий:

     #!/bin/sh
     # ###########################
     # Parameters
     # $1 Source Directory
     # $2 Source File
     # $3 Target IP
     # $4 Target File
     # $5 Target Directory
     # $6 Mode (binary or ascii)
     # $7 User
     # $8 Pwd
     # ###########################
         lftp sftp://$7:$8@$3 -e "cd $5; put $1$2; bye"

Этот сценарий вызывается из программы SAP abap путем вызова функции SXPG_COMMAND_EXECUTE. Возвращаемая информация из сценариев оболочки обычно фиксируется в возвращаемом параметре EXEC_PROTOCOL. Все отлично работает со всеми остальными сценариями bash, но с lftp мы ничего не получаем от stdout. Мы получаем ошибки, поэтому я предполагаю, что он захватывает stderr. Есть идеи, почему это так?


person George Adjei    schedule 20.10.2020    source источник
comment
Большое спасибо за ответ. Да, я смотрел на это, и вы правы насчет буферизации. Теперь я записываю вывод в файл журнала и помещаю его в конец скрипта. Теперь вывод записывается, потому что в конце я делаю кошку файла журнала. Буду продолжать экспериментировать.   -  person George Adjei    schedule 22.10.2020
comment
Если вы не против, тогда я опубликую свой комментарий в качестве ответа.   -  person Jagger    schedule 22.10.2020


Ответы (1)


Это не имеет отношения ни к SAP, ни к ABAP. Посмотрите сообщение здесь на ServerFault.com.

Команда может буферизовать свой вывод, посмотрите там принятый ответ и попытайтесь разблокировать его.

person Jagger    schedule 22.10.2020