Di bawah ini adalah skrip yang saya coba jalankan, yang berjalan tanpa masalah
for i in `seq 200 2100`
do
usr=(`ssh -t -t -o ConnectTimeout=60 machine$1 finger | tail -1 | awk '{print$1}'`)
echo $usr
done
Tapi begitu saya menambahkannya ke crontab, itu tidak memberi saya pengguna.
22 12 * * * sh /home/subrahmanyam/Scripts/who.sh
Tolong berikan pemikiran Anda .....
mungkin cron iblis sedang berjalan, jadi kita perlu memasukkan beberapa binari ...?
shell
ssh
cron
authentication
Gilles 'SANGAT berhenti menjadi jahat'
sumber
sumber
Jawaban:
Anda dapat membuat koneksi ssh dalam sesi cron. Yang Anda butuhkan adalah mengatur otentikasi kunci publik untuk memiliki akses tanpa kata sandi. Agar ini berfungsi, Anda harus memiliki
PubkeyAuthentication yes
di setiap server jauhsshd_config
.Anda dapat membuat pasangan kunci pribadi / publik dengan atau tanpa frasa sandi. Jika Anda menggunakan kata sandi (recommented), Anda juga harus memulai ssh-agent. Tanpa frasa sandi, Anda hanya perlu menambahkan parameter
-i your_identity_file
kessh
baris perintah.ssh
akan digunakan$HOME/.ssh/id_rsa
sebagai default.Saya meniru contoh Anda dengan menggunakan pasangan kunci dengan frasa sandi. Begini cara saya melakukannya.
1) Membuat pasangan kunci dengan frasa sandi. Menyimpan kunci pribadi sebagai
~/.ssh/id_rsa_test
, yang seharusnya memiliki izin yang benar secara default. Kita dapat memasukkan frasa sandi kosong karena tidak menggunakan frasa.2) Mengirim kunci publik ke server, melakukan hal yang sama untuk semuanya. Ingat mereka harus
PubkeyAuthentication
diaktifkan.3) Jalankan ssh-agent sebagai layanan dengan
-s
. Ini tidak akan membunuhnya jika Anda keluar. Keluarannya adalah skrip shell yang valid, mengatur lingkungan sehingga klien ssh akan tahu cara menghubungkannya. Kami menyimpannya ke file (hanya baris pertama yang benar-benar diperlukan).4) Memuat di atas ke lingkungan kita saat ini sehingga kita dapat menggunakan
ssh-add
untuk menambahkan kunci pribadi kitassh-agent
. frasa sandi dari atas.5) Terverifikasi itu ditambahkan.
6) Skrip yang saya gunakan, sedikit dimodifikasi dari milik Anda. Perhatikan bahwa saya tidak menyertakan perintah ssh di dalam tanda kurung dan tidak menggunakan backtick
$()
, yang merupakan alternatif yang lebih baik untuk substitusi perintah (inibash
kompatibel, Anda tidak menyebutkan shell yang Anda gunakan). Saya menggunakan perintah ssh yang sama persis dengan milik Anda.7) crontab saya (perhatikan bahwa saya
sh
sebenarnyabash
)8) Output
Satu-satunya masalah dengan menggunakan kata sandi adalah bahwa Anda harus memasukkannya secara manual setidaknya satu kali. Jadi, hal di atas tidak akan bekerja secara otomatis setelah reboot.
sumber
Siapa yang mengetik kata sandi? Pekerjaan cron tidak bisa didapatkan di ssh-agent Anda, jadi kunci publik tidak akan berfungsi.
Anda perlu menyediakan
ssh
file kunci secara eksplisit (lihat-i
opsi), karena tidak dapat meminta agen; dan kunci itu harus memiliki frasa sandi kosong.sumber
/dev/tty
untuk membaca kata sandi alih-alihstdin
; itu tidak akan bekerja dari cron.known_hosts
? Tapi ya, Anda harus berhati-hati terhadap izin - file kunci pribadi harus mode 0600 atau bahkan 0400, milik Anda. Jika Anda memerlukan beberapa pengguna lain untuk dapat menggunakannya juga, Anda harus melihat ke dalam POSIX ACL atau yang serupa.kinit
di dalam pekerjaan cron. Yang mengatakan, keytab juga membutuhkan perawatan yang sama dalam perizinan; tetapissh
setidaknya tidak akan mengeluh tentang mereka.Daripada menyimpan file sementara seperti yang dilakukan forcefsck, saya lebih suka menggunakan
find
untuk mencari agen aktif.Pada topik skrip yang membutuhkan
ssh-agent
, saya menggunakan:Ia mencari
ssh-agent
soket dan mengembalikan yang pertama. Ini dibatasi hanya untuk pengguna saat ini, oleh karena itu Anda tidak akan sengaja mencoba menggunakan pengguna lain dan mendapatkan izin ditolak kesalahan. Anda juga harus sudah masuk dengan aktifssh-agent
. (Ubuntu memulai agen ketika GUI mulai).Jika Anda meletakkan ini di skrip lain, Anda harus menyebutnya dengan
source
atau.
karena itu perlu mengaturSSH_AUTH_SOCK
variabel.sumber
Gunakan ssh-cron untuk mengatur koneksi SSH terjadwal ke server aman tanpa mengekspos kunci SSH Anda, tetapi menggunakan agen SSH.
sumber
Anda dapat menjalankan skrip atau perintah di crontab seperti:
atau
sumber