SFTP dalam pekerjaan cron

0

Isu

  1. Saya ingin secara otomatis mengunduh file melalui SFTP
  2. Saya mengatur server SFTP dan mekanisme penguncian
  3. Saya telah membuat skrip bash sederhana - script.sh
  4. Saya menambahkan entri di cron untuk skrip

Script, script.sh :

#!/bin/bash  
sftp user@server:/home/user/file.txt  
exit 0

Menjalankan skrip secara manual berfungsi dengan baik (file teks disimpan di direktori home), tetapi menambahkan script.sh (dengan izin yang tepat) untuk crontabtidak melakukan apa pun.

Entri crontab:

* * * * * /home/user/script.sh

Untuk otentikasi saya digunakan ssh-keygenuntuk membuat satu set kunci (pribadi, publik) dan mengatur otentikasi silang ke server SFTP.

Untuk otomatisasi skrip saya gunakan keychainuntuk otentikasi tanpa kata sandi.

Saat ini

Saat ini, saya memiliki skrip bernama script.sh yang terletak di direktori home "user" ( /home/user/).

Ketika dijalankan rootsecara manual, skrip mendapatkan file dari server SFTP, dan menempatkannya di /home/user/.

Itu tidak melakukan tindakan ini ketika dijalankan dari cronpekerjaan. Di cron, sftpperintah mendapat kesalahan.

Ide ide?

Sedang mengerjakannya

  1. Mengubah variabel HOME pada /etc/crontabtidak menyelesaikan masalah
  2. Menyatakan path lengkap dalam script.sh tidak menyelesaikan masalah
  3. Menyatakan variabel PATH di script.sh tidak menyelesaikan masalah
  4. Saya menangkap kesalahan dari sftpperintah - itu 255

mengeksekusi skrip secara manual ( ./script.sh) masih berfungsi dengan sempurna ...

sesuatu yang aneh
sumber
silakan kirim entri crontab di sini
Stef K
Bagaimana Anda mengautentikasi ke server? Pengguna apa yang menjalankan entri crontab Anda? Dimana script.shlokasinya?
Jakuje
@StefK, crontab diposting :)
somethingorange
4
Tidak rootmemiliki akses ke kunci Anda. Anda harus menjalankan pekerjaan crontab sebagai pengguna Anda.
Jakuje
1
Gunakan sftp -vvvdan tambahkan output ke pertanyaan, sehingga kita bisa melihat apa yang salah.
muru

Jawaban:

1

Contoh kerja:

skrip sederhana bernama hello.shyang ditambahkan ke file teks kata halo (menggunakan path lengkap untuk setiap perintah):

catatan myuser adalah nama pengguna Anda

#!/bin/bash printf 'hello' >> /home/myuser/hello.txt

membuat skrip dapat dieksekusi menggunakan chmod +x hello.sh

Entri crontab yang berjalan setiap menit Anda dapat mengubahnya sesuai dengan kebutuhan Anda:

* * * * * /home/myuser/hello.sh

Beberapa detail:

  • Setiap pekerjaan cron dijalankan sebagai pengguna yang mendaftarkannya. Jika pengguna root mendaftarkan pekerjaan cron, pekerjaan ini akan berjalan dengan hak akses root.

  • Jika pengguna non root mendaftarkan pekerjaan cron, pekerjaan ini akan berjalan dengan hak pengguna yang disebutkan di atas, jika pekerjaan tersebut membutuhkan hak root, itu akan gagal karena diprakarsai oleh pengguna non root ...

  • Perintah panggilan dan skrip yang lebih baik menggunakan jalur lengkap hanya untuk memastikan bahwa cron dapat menemukan dan memanggilnya dengan benar, jika tidak, ia akan gagal tanpa umpan balik yang bermanfaat.

Stef K
sumber
Apa yang Anda gambarkan di sini adalah apa yang saya miliki di sistem saya. Saya memiliki skrip bash (dengan izin eksekusi) dijalankan melalui cron. Saya menggunakan ini dalam sejuta situasi lain - satu-satunya perbedaan adalah bahwa saya sekarang mencoba sftp. Untuk beberapa alasan, ini tidak berfungsi - artinya, file tidak (!) Sedang diunduh dari server atau tidak ditempatkan di direktori home. Terima kasih - tetapi jawaban ini tidak menyelesaikan masalah saya :)
somethingorange
lihat @Jakuje komentar, jika Anda menjalankan pekerjaan sebagai root tetapi kunci dibuat untuk pengguna non root
Stef K