Curl не удается загрузить с «Ошибка NSS -5938» при вызове из crontab - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть сценарий оболочки, который:

  1. загружает файлы из базы данных
  2. сохраняет их как файлы CSV локально
  3. передает файл на другой сервер через FTP (используя curl).

При запуске вручную скрипт запускает файл, но при запуске через crontab он завершается неудачей на третьем этапе. вывод CURL показывает NSS error -5938 (PR_END_OF_FILE_ERROR) после команды STOR (что не происходит при запуске вручную).

Есть мысли? Некоторые выдержки из моего кода / журналов ниже:

Crontab:

    0 20 * * * cd /home/username/automation/process && ./process.sh > /home/username/automation/process/lastrun.log 2>&1

Команда CURL запускается из другого сценария оболочки ./totarget.sh:

#!/bin/bash
curl -T $1 -ssl ftps://ftp.domain.com/ --user username:password --cacert /home/username/automation/process/output/team-ftp.pem -v

Вывод из CURL (пути / пользователи / хосты заменены):

Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /home/username/automation/process/output/team-ftp.pem
  CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate:
*       subject: E=Team@domain.com,OU=Team Name,O=Company Name,L=City,ST=NY,C=US,CN=team.domain.com
*       start date: Aug 07 21:42:43 2019 GMT
*       expire date: Aug 06 21:42:43 2020 GMT
*       common name: team.domain.com
*       issuer: E=Team@domain.com,OU=Team Name,O=Company Name,L=City,ST=NY,C=US,CN=team.domain.com
< 220-Team Name FTP
< 220-Unauthorized use is prohibited
< 220 Access is logged
> USER username
< 331 Password required for username
> PASS password
< 230 Logged on
> PBSZ 0
< 200 PBSZ=0
> PROT P
< 200 Protection level set to P
> PWD
< 257 "/" is current directory.
* Entry path is '/'
> EPSV
* Connect data stream passively
* ftp_perform ends with SECONDARY: 0
< 229 Entering Extended Passive Mode (|||61786|)
*   Trying 123.456.789.123...
* Connecting to 123.456.789.123 (123.456.789.123) port 61786
* Connected to team.domain.com (123.456.789.123) port 990 (#0)
> TYPE I
< 200 Type set to I
> STOR Filename.csv
< 150 Opening data channel for file upload to server of "/Filename.csv"
* Doing the SSL/TLS handshake on the data stream
*   CAfile: /home/username/automation/process/output/team-ftp.pem
  CApath: none
* NSS error -5938 (PR_END_OF_FILE_ERROR)
* Encountered end of file
* Failure sending ABOR command: SSL connect error
* Closing connection 0

Я экспортировал самозаверяющий сертификат сайта и поместил его в team-ftp.pem, который явно включен в случае общей цели. sh скрипт. Могли бы по-настоящему понять, почему это работает для меня, но не для crontab того же пользователя.

Некоторая информация о системе:

$ uname -a
Linux hostname.domain.com 3.10.0-693.11.1.el7.x86_64 #1 SMP Fri Oct 27 05:39:05 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

$ curl --version
curl 7.44.0 (x86_64-unknown-linux-gnu) libcurl/7.44.0 OpenSSL/1.0.2g
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL TLS-SRP UnixSockets

Заранее спасибо.

1 Ответ

0 голосов
/ 29 апреля 2020

Мне удалось решить проблему, вызвав bash напрямую из crontab и затем передав ему скрипт оболочки следующим образом:

 0 20 * * * bash -c "cd /home/username/automation/process && ./process.sh > /home/username/automation/process/lastrun.log 2>&1"

Надеюсь, это поможет кому-то в будущем.

...