попробуйте
printf "SENTENCIA : %s \n" "$sentencia"
с кавычками.
При использовании без кавычек
printf "SENTENCIA : %s \n" $sentencia;
заменяется на (я опускаю ;
)
printf "SENTENCIA : %s \n" select 1 from dual
, поскольку существует только один шаблон печати (например,% s) printf вызывается многократно.
printf "SENTENCIA : %s \n" select
printf "SENTENCIA : %s \n" 1
printf "SENTENCIA : %s \n" from
printf "SENTENCIA : %s \n" dual
ForceCommand sftp -i /home/someuser/.ssh/id_rsa someuser@some_other_server
Приведенное выше действие запустит SFTP клиент на промежуточном сервере с его текстовым интерфейсом. Ваш локальный SFTP-клиент(sftp
или любой другой )не может общаться с этим. Требуется двоичный SFTP протокол . Это также объясняет, почему ssh
работает как клиент sftp
. Но это не так. Он просто передает текстовый интерфейс клиента sftp
на промежуточный сервер.
Вам нужно что-то вроде:
ForceCommand ssh -s sftp -i /home/someuser/.ssh/id_rsa someuser@some_other_server
Это заставляет (самый )удаленный сервер запускать SFTP сервер(-s sftp
)и промежуточный сервер для передачи двоичного протокола SFTP туда и обратно(ssh
просто передает двоичный файл ввод/вывод удаленного sftp-server
, так же, как в вашей настройке локальный ssh
передает текстовый ввод/вывод промежуточногоsftp
).
Но если вам нужны и SFTP, и SSH, вам нужно будет использовать директивуSubsystem
для SFTP, а неForceCommand
:
Subsystem sftp ssh -s sftp -i /home/someuser/.ssh/id_rsa someuser@some_other_server
Или, чтобы не повторять туннелирование отдельно для SSH и SFTP, вы можете использовать переменную среды SSH_ORIGINAL_COMMAND
, чтобы решить, следует ли использовать -s sftp
или нет.
Если вы действительно знаете, что (самый )удаленный SFTP-сервер также имеет OpenSSH и тот же путь к двоичному файлу sftp-server
, что и промежуточный сервер,это должно охватывать как SSH, так и SFTP:
ForceCommand ssh -i /home/someuser/.ssh/id_rsa someuser@some_other_server $SSH_ORIGINAL_COMMAND