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

278
Mr BB

Я пытаюсь сделать 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 $* | 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-сервера: Включение режима совместимости для протокола 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_REX_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: сервер-> клиентский шифр: 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: проверка без проверки ключа хоста идентификатора порта не удалось. Соединение закрыто

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

-1
Я уже [просил вас] (https://stackoverflow.com/q/52929915/850848#comment92769549_52929915) опубликовать сведения о вашем * "сценарии оболочки Unix" *. Martin Prikryl 5 лет назад 0
Если вы ожидаете ответа, вы должны предоставить более подробную информацию. RalfFriedl 5 лет назад 0
Когда вы * "делаете sftp вручную" *, вы не используете `-oPort = 56050`. Martin Prikryl 5 лет назад 0
если я не вижу oPort, выдается ошибка, так как этот порт # включен только. даже вручную я использовал oPort Mr BB 5 лет назад 0
Так что отредактируйте свой вопрос, чтобы показать это. В вашей ручной команде в вопросе нет `oPort`. Martin Prikryl 5 лет назад 0
Также добавьте ключ `-v` в руководство и скрипт` sftp` и покажите нам их вывод. Martin Prikryl 5 лет назад 0
Обновил мой вопрос с журналами -v. Пожалуйста, проверьте. Я вижу, что есть некоторые различия Mr BB 5 лет назад 0
Вы даже запускаете его вручную и в сценарии на * той же машине *? Потому что каждый прогон использует свою версию OpenSSH. Martin Prikryl 5 лет назад 0
Да, я нашел эту разницу в версиях. Тем не менее, я работаю на одной машине как вручную, так и по сценарию. Будет ли это иметь значение для сценариев .sh и .ksh? Mr BB 5 лет назад 0
Что вы получаете от `which sftp` в оболочке и в скрипте? Martin Prikryl 5 лет назад 0
Да уж..! Я проверил снова сейчас. Машины разные, и линия Шебан также нуждалась в исправлении. Mr BB 5 лет назад 0

1 ответ на вопрос

0
Ohad Cohen

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

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

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