Saya ingin menulis skrip yang memanggil openvpn
terlebih dahulu, diikuti oleh ssh
. Saat mengetik perintah
sudo openvpn ~/my_connection.ovpn
di command prompt saya mendapatkan output berikut:
...
Wed Jan 4 21:04:35 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jan 4 21:04:35 2017 /sbin/ip link set dev tun0 up mtu 1500
Wed Jan 4 21:04:35 2017 /sbin/ip addr add dev tun0 local IP_FOO peer IP_FOO
Wed Jan 4 21:04:35 2017 Initialization Sequence Completed
Perintah ini memblokir dan shell tidak dilepaskan. Untuk memulai koneksi ssh setelahnya saya perlu mendorong proses openvpn ke latar belakang dengan mengetik Ctrl+ Zdiikuti oleh a bg
.
Namun, saya ingin memanggil langkah koneksi openvpn dan ssh secara otomatis hanya dengan memanggil file bash saya. Bagaimana cara saya meniru Ctrl+ Zdan bg
langkah - langkah dalam file ini?
Saya sudah mencoba menambahkan &
ke openvpn
perintah dan menempatkan nohup
di depannya. Tidak ada yang berhasil.
sudo -b
untuk menjalankan perintah yang mengikutinya di latar belakang--daemon
opsi masih dapat digunakan, tetapi Anda benar bahwa bagian tentang menjalankannya sebagai root adalah pusat pertanyaan ini dan harus tercermin dalam judulnya . Terima kasih telah menunjukkan ini!Jawaban:
TL; DR: Gunakan
sudo -b
atau, lebih baik ,.openvpn [...] --daemon
Karena Anda menjalankan
openvpn
(dan, kurang spesifik, karena Anda ingin menjalankan program sebagai root di latar belakang), informasi yang paling umum dikeluarkan tentang cara menjalankan perintah di latar belakang tidak mengatasi situasi Anda. Kamu berkata:Perintah Anda adalah:
Di bawah
sudo
konfigurasi default, jika Anda belum memasukkan kata sandi Andasudo
dalam konteks yang sama (untuk penggunaan interaktif, biasanya ini berarti terminal yang sama) maka ia akan meminta kata sandi Anda. Tetapi jika Anda menjalankan perintah di latar belakang dengan menambahkan&
maka Anda tidak akan ditampilkan baris atau diberi kesempatan untuk mengetiknya.[sudo] password for user:
Jadi dalam situasi ini, menjalankan perintah, memasukkan kata sandi, dan mengirimnya ke latar belakang setelahnya adalah cara yang masuk akal untuk melakukannya, untuk penggunaan interaktif .
Tapi itu bukan satu-satunya cara dan, seperti yang Anda katakan, Anda tidak akan mau melakukan itu dalam naskah .
Cara 1: Pastikan Anda
sudo
memiliki cap waktu yang baru.Anda dapat memastikan bahwa
sudo
memiliki cap waktu saat ini ketika digunakan untuk menjalankan perintah Anda, dengan terlebih dahulu menjalankan:Kemudian, setelah itu, Anda dapat menjalankan:
Namun, biasanya lebih baik untuk menghindari
&
(dannohup
) sama sekali ketika Anda ingin menjalankan perintah di latar belakangsudo
. Ini khususnya kasus untuk scripting.Cara 2: Gunakan
sudo -b
. Secara umum, ini biasanya yang Anda inginkan.Sebagai gantinya, Anda dapat menjalankan
sudo
dirinya sendiri di latar depan, tetapi melewati-b
bendera sehinggasudo
menyebabkan perintah untuk dijalankan di latar belakang.Ini biasanya merupakan cara yang lebih baik, terutama jika Anda meletakkan perintah dalam skrip. Dengan
sudo -b
Anda tidak mendapatkan kontrol pekerjaan , tetapi dalam shell script kontrol pekerjaan dinonaktifkan secara default dan Anda biasanya tidak menggunakannya .Seperti yang
man sudo
dijelaskan:Ini berfungsi karena tidak ada yang berjalan di latar belakang sampai setelah sudo menerima kata sandi Anda (jika perlu) dan memutuskan bahwa Anda diizinkan untuk menjalankan perintah.
Cara 3: Tapi untuk
openvpn
, Anda mungkin harus menjalankannya--daemon
.openvpn
akan berjalan di latar belakang secara otomatis jika Anda menjalankannya dengan--daemon
opsi:Lulus
--daemon
setelah.opvn
nama file Anda daripada sebelumnya; argumen berikut--daemon
, jika ada, ditafsirkan sebagai nama yangopenvpn
harus digunakan oleh proses daemonized . (Apakah tidak juga append&
.)Apakah ini sesuai atau tidak tergantung pada apakah atau tidak ada interaksi harus terjadi setelah
openvpn
telah dijalankan tetapi sebelum terwujud. Dan itu tergantung, sebagian, pada apa yang diatur~/my_connection.ovpn
. Tetapi jikaopenvpn
tidak bisa segera daemonize, maka semua cara lain untuk segera menjalankannya di latar belakang juga akan rusak .Oleh karena itu, dalam situasi di mana Anda tahu bahwa Anda ingin
openvpn
untuk mulai berjalan di latar belakang, dan Anda tahu Anda tidak akan ingin membawa kembali ke latar depan, Anda harus sangat mempertimbangkan metode memohon itu dengan--daemon
pilihan. Ini khusus untuk -openvpn
sebagian besar program tidak mendukung--daemon
opsi, meskipun banyak program server memiliki beberapa opsi seperti itu. (Namun nama dan sintaks bervariasi.)Untuk memutuskan apakah atau tidak untuk menggunakan opsi ini (dan bagaimana Anda ingin menggunakannya), saya sarankan Anda membaca dengan
openvpn
halaman buku panduan , terutama pada bagian--daemon
. Ini memiliki banyak informasi yang berguna, dan saya hanya mengutip paragraf pertama di sini:Cara 4 : Kadang-kadang masuk akal untuk menjalankan seluruh skrip sebagai root.
Jika Anda memiliki skrip yang melakukan beberapa tindakan sebagai root, skrip tidak memiliki aktivitas signifikan yang secara wajar dijalankan bukan sebagai root, dan tidak pernah ada yang berguna untuk menjalankan skrip sebagai pengguna non-root, maka pengguna skrip sebaiknya menjalankannya sebagai root.
Jika ini masalahnya, maka Anda harus menghapus
sudo
dari perintah dalam skrip. Ketika skrip dijalankan sebagai root, tidak perlusudo
. (Meskipun root kaleng, secara default, jalankan perintah apapun sebagai pengguna termasuk dirinya dengansudo
dan tidak perlu password untuk melakukannya. Jadi, jika Anda melakukan hal cuti darisudo
dalam script maka akan mungkin masih bekerja.)Jika Anda memiliki contoh
sudo
dalam naskah yang benar-benar digunakan untuk menjalankan perintah karena beberapa user selain root (dengan ), maka Anda harus tetap menjaga mereka contoh.-u user
Jika seluruh skrip dijalankan sebagai root, maka sebagian besar cara khas membuat perintah dijalankan di latar belakang berlaku, termasuk menambahkan
&
dan, jika perlu, penggunaannohup
(yang sudah Anda ketahui). Untuk ini, meskipun, Anda masih harus sangat mempertimbangkan menggunakanopenvpn
dengan--daemon
pilihan.sumber
TL; DR Jalankan dalam mode daemon:
openvpn --config Windscribe-Japan.ovpn --daemon
Melewati nama file konfigurasi (.ovpn) ke
openvpn
perintah hanya berfungsi jika tidak ada opsi lain yang ditentukan. Jika saya menentukan--daemon
opsi maka openvpn mencoba mengurai nama file sebagai parameter opsi dan melempar kesalahan Opsi: Saya mencoba mengurai "Windscribe.ovpn" sebagai parameter --option tetapi saya tidak melihat '-' yang memimpin .Menjawab:
Untuk menghindari ini, nama file harus ditentukan dengan
--config
opsi. Sebagai contohopenvpn --config Windscribe.ovpn --daemon
,. Kemudian ikuti syslog dengantail -f /var/log/syslog
, untuk pemeriksaan lebih lanjut.Anda juga dapat memeriksa sebelum dan sesudah keluaran dari perintah curl ini
curl ifconfig.co
untuk memastikan bahwa VPN terhubung.Catatan: Ini akan menjaga daemon tetap berjalan bahkan setelah Anda keluar dari sesi SSH.
sumber
Anda bisa menyalin
Kemudian tanyakan 'service openvpn @ confName start' untuk menangani semua daemonisasi dan sudo untuk Anda.
Lihat /unix//a/366680/198666
sumber