Masalah
Saat menjalankan apt-get install
sesi SSH non-interaktif, sesi tidak pernah ditutup. Contoh:
ssh user@target "sudo apt-get -y install my_package"
Tidak my_package
diinstal dengan benar, tetapi sesi SSH hanya menggantung terbuka.
Pertanyaan
Apakah ada tanda untuk lulus SSH untuk mulai apt-get
bekerja?
informasi tambahan
Konteks
Instalasi jarak jauh digunakan untuk penyebaran paket secara otomatis pada server integrasi. Segera setelah kami mendorong beberapa perubahan kode ke repositori, pekerjaan menarik kode, membangun paket, dan menyebarkannya pada integrasi untuk memeriksa apakah semuanya berfungsi dengan baik (sejauh penyebaran terkait).
Sudah Mencoba & Catatan
- Eksekusi sesi SSH yang sama
apt-get update
ditutup dengan rapi. Perhatikan bahwaapt-get update
tidak interaktif, sedangkanapt-get install
. Ini mungkin menunjukkan bahwa interaktivitas adalah masalah. - Perintah seperti
ssh user@target "sudo apt-get install my_package && echo Hello"
tidak pernah mencapaiecho
. debconf
mengeluh bahwa ia tidak dapat menemukan tampilan depan yang bagus (Tampilan, Readline), dan jatuh kembali ke Teletype (walaupun Readline tersedia).- Sehubungan dengan frontend debconf, meneruskan
-t
untuk memaksa TTY dengan SSH tidak membantu. Tidak jugaDEBIAN_FRONTEND=noninteractive
. - Semua dilakukan di Ubuntu 12_04 LTS.
ssh user@target
Maka perintah dari shell) apakah itu berfungsi dengan benar?Jawaban:
Jawaban berikut tentang SF melakukan trik:
ssh gagal menjalankan perintah jarak jauh ketika dijalankan dari skrip cron bash
The
-t
pasukan bendera alokasi pseudo-tty, kecuali mungkin ketika tidak ada TTY lokal. Tapi melewati bendera dua kali seperti-t -t
hanya berpura-pura melakukannya. Dan itu memecahkan masalah.Lihat dokumentasi SSH:
Sekarang, mengapa itu berhasil? Ternyata
debconf
tidak mengeluh lagi tentang frontend di log. Jadi saya percaya bahwa-t
set ganda (umpan?) Sesuaidebconf
kebutuhan, yang memungkinkanapt-get install
penyelesaian untuk mengakhiri sesi SSH dengan bersih.sumber
Ketika saya melihat melalui itu, ini dapat melakukan pekerjaan. Memanggil perintah apa pun harus diikuti dengan keluar dan heredoc. Menemukan solusinya, tetapi belum mencobanya secara pribadi.
Jawaban asli datang dari sini: http://www.thetechrepo.com/main-articles/529-execute-a-command-remotely-over-ssh-and-then-close-the-connection
sumber
ssh user@host free -m
di lingkungan target saya, dan itu berfungsi seperti pesona. Saya akan mencoba rekomendasi selanjutnya.Di bawah debian / jessie saya berhasil dengan perintah ini:
Tapi mungkin Anda harus mempertimbangkan untuk menggunakan yang memungkinkan untuk ini dan tugas upcomming lainnya http://docs.ansible.com/ansible/apt_module.html
sumber