SFTP не работает через сценарий оболочки Unix

-1

Я пытаюсь сделать sftp через сценарий оболочки Unix и получаю ошибку

Host key verification failed. Connection closed

Однако, когда я делаю sftp вручную, как показано ниже, его работа

sftp -b batch_file user@remoteserver

batch_fileсодержит lcd, cdи putкоманды.

Автор сценария:

#get inputs parameters
file=$1
dir=$2
sftp_node=$3
dest_dir=$4
dol=$

original_dir='eval echo $dol$dir'
dest_dir='eval echo $dol$dest_dir'

cd $original_dir
sfile='ls -lt ${file}* | head -1'

#To execute sftp in batch mode

rm $SCRIPTDIR/sftp_batch_file.txt

echo "lcd $original_dir" > $SCRIPTDIR/sftp_batch_file.txt
echo "cd $dest_dir" >> $SCRIPTDIR/sftp_batch_file.txt
echo "put $sfile " >> $SCRIPTDIR/sftp_batch_file.txt

sftp -oPort=56050 -b $SCRIPTDIR/sftp_batch_file.txt user@servername
s=$?

if [ $s -eq 0]
then 
echo "$original_dir/$sfile sent to $dest_dir/$sfile  on server"
exit 0
fi

Журнал ручного запуска:

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 февраля 2013 г. debug1: чтение данных конфигурации / etc / ssh / ssh_config debug1: применение параметров для * debug1: подключение к серверу [123.456.789.000] порт 12345. debug1: соединение установлено. debug1: файл удостоверений /home/.ssh/id_rsa тип 1 debug1: файл удостоверений /home/.ssh/id_rsa-cert тип -1 debug1: файл удостоверений /home/.ssh/id_dsa тип -1 debug1: файл удостоверений / home / .ssh / id_dsa-cert тип -1 debug1: файл идентификации /home/.ssh/id_ecdsa тип -1 debug1: файл идентификации /home/.ssh/id_ecdsa-cert тип -1 debug1: версия удаленного протокола 2.0, версия удаленного программного обеспечения SFTP Отладка сервера 1: нет соответствия: отладка SFTP-сервера 1: включение режима совместимости для протокола 2.0. Отладка 1: строка локальной версии. SSH-2.0-OpenSSH_5.3. Отладка 1: неуказанный сбой GSS. Незначительный код может предоставить дополнительную информацию. Файл кэша учетных данных «/ tmp / krb5cc_3732»

debug1: неизвестный сбой GSS. Незначительный код может предоставить дополнительную информацию. Файл кэша учетных данных '/ tmp / krb5cc_3732' не найден

debug1: SSH2_MSG_KEXINIT отправлено debug1: SSH2_MSG_KEXINIT получено debug1: kex: сервер-> клиент aes128-cbc hmac-sha1 нет debug1: kex: клиент-> сервер aes128-cbc hmac-sha1 нет debug1: SSH2_MSG0G0_0G0_EXG_EX_RG_0_0G050_0_RG_RG : ожидается SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT отправлено debug1: ожидается SSH2_MSG_KEX_DH_GEX_REPLY debug1: Host '[server]': 12345 известно и соответствует ключу хоста RSA. debug1: Найдено ключ в /home/.ssh/known_hosts:24 debug1: ssh_rsa_verify: подпись правильной debug1: SSH2_MSG_NEWKEYS послал debug1: ожидая SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS получил debug1: SSH2_MSG_SERVICE_REQUEST послал debug1: SSH2_MSG_SERVICE_ACCEPT получил debug1: авторизации, которые могут продолжать: пароль, ОткрытыйКлюче , клавиатура-интерактивная отладка1: Следующий метод аутентификации: publickey debug1: Предоставление открытого ключа: /home/.ssh/id_rsa debug1: Сервер принимает ключ: pkalg ssh-rsa blen 277 debug1: чтение закрытого ключа PEM выполнено: тип RSA debug1: Аутентификация прошла успешно (publickey). debug1: канал 0: новый [клиент-сеанс] debug1: вход в интерактивный сеанс. debug1: отправка среды. debug1: отправка env LANG = en_US.UTF-8 debug1: отправка подсистемы: sftp sftp> lcd sftp> cd sftp> положить имя файла Загрузка имени файла в / имя файла debug1: client_input_channel_req: канал 0 rtype ответ о состоянии выхода 0 debug1: channel 0: free : client-session, nchannels 1 debug1: очистка fd 0 O_NONBLOCK Передано: отправлено 4832, получено 2696 байт, за 0,6 секунды Байт в секунду: отправлено 8159.3, получено 4552.4, debug1: состояние выхода 0 Аутентификация прошла успешно (publickey). debug1: канал 0: новый [клиент-сеанс] debug1: вход в интерактивный сеанс. debug1: отправка среды. debug1: отправка env LANG = en_US.UTF-8 debug1: отправка подсистемы: sftp sftp> lcd sftp> cd sftp> положить имя файла Загрузка имени файла в / имя файла debug1: client_input_channel_req: канал 0 rtype ответ о состоянии выхода 0 debug1: channel 0: free : client-session, nchannels 1 debug1: очистка fd 0 O_NONBLOCK Передано: отправлено 4832, получено 2696 байт, за 0,6 секунды Байт в секунду: отправлено 8159.3, получено 4552.4, debug1: состояние выхода 0 Аутентификация прошла успешно (publickey). debug1: канал 0: новый [клиент-сеанс] debug1: вход в интерактивный сеанс. debug1: отправка среды. debug1: отправка env LANG = en_US.UTF-8 debug1: отправка подсистемы: sftp sftp> lcd sftp> cd sftp> положить имя файла Загрузка имени файла в / имя файла debug1: client_input_channel_req: канал 0 rtype ответ о состоянии выхода 0 debug1: channel 0: free : client-session, nchannels 1 debug1: очистка fd 0 O_NONBLOCK Передано: отправлено 4832, получено 2696 байт, за 0,6 секунды Байт в секунду: отправлено 8159.3, получено 4552.4, debug1: состояние выхода 0

Скрипт запуска журнала:

OpenSSH_7.5p1, OpenSSL 1.0.2m 2 ноября 2017 г. debug1: чтение данных конфигурации / etc / ssh / ssh_config debug1: init_func_ptrs success debug1: значение krb5 равно 1 debug1: значение gssapi равно 1 debug1: подключение к серверу [123.456.789.000] порт 12345. debug1: соединение установлено. debug1: key_load_public: нет такого файла или каталога debug1: идентификационный файл /home.ssh/identity типа -1 debug1: key_load_public: такого файла или каталога нет debug1: идентификационный файл /home.ssh/identity-cert type -1 debug1: включение совместимости режим для протокола 2.0 debug1: строка локальной версии SSH-2.0-OpenSSH_7.5 debug1: удаленный протокол версии 2.0, версия удаленного программного обеспечения SFTP-сервер debug1: нет соответствия: SFTP-сервер debug1: проверка подлинности на сервере: 12345 как «пользовательская» debug1: SSH2_MSG_KEXINIT отправлено debug1: SSH2_MSG_KEXINIT получил debug1: kex: алгоритм: diffie-hellman-group-exchange-sha256 debug1: kex: алгоритм ключа хоста: ssh-rsa debug1: kex: server-> клиентский шифр: aes128-cbc MAC: hmac-sha2-256 сжатие: нет debug1: kex: client-> сервер шифр: AES128-CBC MAC: HMAC-sha2-256 сжатия: нет debug1: SSH2_MSG_KEX_DH_GEX_REQUEST (2048 <8192 <8192) послал debug1: получил SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT послал debug1: получил SSH2_MSG_KEX_DH_GEX_REPLY debug1: хост-сервер ключ: SSH-SHA256 RSA: U2JlOXEu69uw4l + TGqDBRxnaH + Mjf12WeHc4IGd6lcI debug1: проверка без идентификатора порта Сбой проверки ключа хоста. Соединение закрыто SSH2_MSG_KEX_DH_GEX_REQUEST (2048 <8192 <8192) послал debug1: получил SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT послал debug1: получил SSH2_MSG_KEX_DH_GEX_REPLY debug1: ключ хоста сервера: SSH-SHA256 RSA: U2JlOXEu69uw4l + TGqDBRxnaH + Mjf12WeHc4IGd6lcI debug1: проверка без проверки ключа хоста идентификатора порта не удалось. Соединение закрыто SSH2_MSG_KEX_DH_GEX_REQUEST (2048 <8192 <8192) послал debug1: получил SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT послал debug1: получил SSH2_MSG_KEX_DH_GEX_REPLY debug1: ключ хоста сервера: SSH-SHA256 RSA: U2JlOXEu69uw4l + TGqDBRxnaH + Mjf12WeHc4IGd6lcI debug1: проверка без проверки ключа хоста идентификатора порта не удалось. Соединение закрыто

Пожалуйста, помогите мне определить и устранить проблему.

Мистер Б.Б.
источник
Если вы ожидаете ответа, вы должны предоставить более подробную информацию.
RalfFriedl
Когда вы «делаете sftp вручную» , вы не используете -oPort=56050.
Мартин Прикрыл
если я не вижу oPort, он выдает ошибку, поскольку этот порт # разрешен только. даже вручную я использовал oPort
мистер Б.Б.
Так что отредактируйте свой вопрос, чтобы показать это. Там нет oPortв вашей ручной команды в вопросе.
Мартин Прикрыл,
Также добавьте -vпереключатель в руководство и скрипт sftpи покажите нам их вывод.
Мартин Прикрыл,

Ответы:

0

как вы проходите аутентификацию на сервере? Пакетный режим sftp не может работать с интерактивными методами аутентификации (он не запрашивает имя пользователя и пароль, вы должны указать учетные данные в командной строке)

если ваш sftp использует пароль, запустите:

sftp -b batch_file user:password@remoteserver
Охад Коэн
источник
Я хотел сделать sftp без жесткого кодирования пароля в скрипте. Я изменил свой скрипт как этот sftp user @ server << EOF; lcd source_dir; cd dest_dir; положить файл; EOF
Мистер BB