OpenVPN'i arka planda, bir komut dosyasında root olarak nasıl çalıştırabilirim?


22

openvpnÖnce onu çağıran bir senaryo yazmak istiyorum ssh. Komutu yazarken

sudo openvpn ~/my_connection.ovpn

komut isteminde aşağıdaki çıktıyı alıyorum:

...
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

Bu komut engelleniyor ve kabuk serbest bırakılmadı. Daha sonra ssh bağlantısı başlatmak için, openvpn işlemini arkaplanın içine Ctrl+ yazıp Zardından a yazmam gerekir bg.

Ancak, openvpn bağlantı adımını ve ssh'yi sadece bash dosyamı çağırarak otomatik olarak çağırmak istiyorum. Bu dosyadaki Ctrl+ Zve bgadımları taklit etmeyi nasıl başarırım ?

Ben eklemek için denedim &için openvpnkomuta ve yerleştirmek için nohuponun önünde. İkisi de işe yaramaz.


Bu tür bir soru defalarca soruldu. Yardıma ihtiyacınız olursa, komut dosyanızı gerçekten göndermeniz gerekir.
Panter

kullanmak sudo -barka planda aşağıdaki komutu çalıştırmak için
Nick Sillito

1
Bana öyle geliyor ki, bu gerçekten de arka plan programlarını root olarak çalıştırmayı pek de kapsayan ve OpenVPN'i nasıl düzgün bir şekilde kullanacağını hiç içermeyen bu sorunun bir kopyası değil.
Eliah Kagan

Ardından, bir arka plan programını root olarak çalıştırmaya çalıştığımı belirtmek için başlığı tekrar değiştirmeliyiz.
boş

@ boş, başlığı istendiği gibi yeniden düzenledim. OpenVPN genellikle root olarak çalıştırılır ve kullanılmadığı durumlarda, --daemonseçenek hala kullanılabilir, ancak onu root olarak çalıştırma kısmının bu soru için merkezi olduğu ve başlığına yansıtılması gerektiği konusunda haklısınız. . Bunu gösterdiğin için teşekkürler!
Eliah Kagan

Yanıtlar:


35

TL; DR: veya, daha iyi kullanın .sudo -bopenvpn [...] --daemon

Çalışmakta olduğunuzdan openvpn(ve daha az spesifik olarak, bir programı arka planda kök olarak çalıştırmak istediğinizden ), arka planda komut çalıştırma hakkında en sık kullanılan bilgiler durumunuzu ele almaz. Dedin:

Cpenvpn komutuna bir & eklemeye ve önüne nohop yerleştirmeye çalıştım. Her ikisi de çalışmıyor.

Emriniz:

sudo openvpn ~/my_connection.ovpn

sudoVarsayılan yapılandırma altında sudo, aynı bağlamda şifrenizi yakın zamanda girmediyseniz (etkileşimli kullanım için, bu genellikle aynı terminal anlamına gelir), ardından şifrenizi ister. Ancak komutu arka planda ekleyerek çalıştırırsanız, &o zaman çizgi gösterilmez veya onu yazma fırsatı verilmez.[sudo] password for user:

Bu durumda, komutu çalıştırmak, şifrenizi girmek ve daha sonra arka plana göndermek, etkileşimli kullanım için bunu yapmanın makul bir yoludur .

Ama bu tek yol değil ve dediğiniz gibi, bunu bir komut dosyasında yapmak istemeyeceksiniz .

Yol 1:sudo Taze bir zaman damgası olduğundan emin olun .

sudoKomutunuzu çalıştırmak için kullanıldığında, ilk önce şu komutu çalıştırarak geçerli bir zaman damgasına sahip olduğundan emin olabilirsiniz :

sudo -v

Sonra ondan sonra koşabilirsiniz:

sudo openvpn ~/my_connection.ovpn &

Ancak, arka planda bir komut çalıştırmak istediğinizde, tamamen &ve nohuptamamen kaçınmak daha iyidir sudo. Bu özellikle komut dosyası için geçerlidir.

Yol 2: Kullanım sudo -b. Genel olarak, genellikle istediğiniz budur.

Bunun yerine, sudokendisini ön planda çalıştırabilir , ancak -bbayrağını sudoileterek komutun arka planda çalışmasına neden olur.

sudo -b openvpn ~/my_connection.ovpn

Bu genellikle daha iyi bir yoldur, özellikle de komutu bir betiğe koyarsanız. İle sudo -bsen alamadım iş denetimini , ancak bir kabuk iş kontrolünde varsayılan olarak devre dışıdır ve genellikle bunu kullanmamalısınız .

Açıklandığı gibi man sudo:

     -b, --background
                 Run the given command in the background.  Note that it is not
                 possible to use shell job control to manipulate background
                 processes started by sudo.  Most interactive commands will
                 fail to work properly in background mode.

Kadar hiçbir şey arka planda çalışırken, çünkü bu işleri sonra sudo şifrenizi alınan (gerekirse) ve komutu çalıştırmak için izin verildiğini tespit etti.

Yol 3: Fakat bunun için openvpnmuhtemelen sadece onunla birlikte çalışmalısınız --daemon.

openvpn--daemonseçeneği ile çalıştırırsanız arka planda otomatik olarak çalışacaktır :

sudo openvpn ~/my_connection.ovpn --daemon

Dosya --daemonadınızdan .opvnönce değil de geçmek ; Aşağıdaki argüman --daemon, varsa, arka plandaki openvpnişlemin kullanması gereken ad olarak yorumlanır . (Do not ekleme de &.)

Bunun uygun olup olmadığı, herhangi bir etkileşimin openvpnçalıştırılmasından sonra ama arka plan yaratılmasından önce gerçekleşmesi gerekip gerekmediğine bağlıdır . Ve bu , kısmen, ne kurulduğuna bağlı ~/my_connection.ovpn. Ama eğer openvpnhemen hemen de kıracak arka planda çalışan, o zaman tüm diğer yollar Artalanda olamazdı .

Bu nedenle, istediğini biliyorum herhangi bir durumda openvpnhiç başlatmak arka planda çalışan ve geri ön plana getirmek istemeyecektir biliyorsun, kuvvetle onu çağırma yöntemi düşünmelisiniz --daemonseçeneği. Bu, özgüdür - çoğu program openvpnbir --daemonseçeneği desteklemez , ancak birçok sunucu programında böyle bir seçenek vardır. (Ancak, sözdizimi ve adı değişir.)

Bu seçeneği kullanmak (ve bunu nasıl kullanmak istediğinize), ben, size tavsiye edip etmemeye karar vermek kılavuz sayfasını özellikle bölümünde, . Çok sayıda yararlı bilgi var ve buradaki yalnızca ilk paragrafı alıntı yapıyorum:openvpn--daemon

       --daemon [progname]
              Become  a  daemon  after  all   initialization   functions   are
              completed.   This option will cause all message and error output
              to be sent to  the  syslog  file  (such  as  /var/log/messages),
              except  for  the  output of scripts and ifconfig commands, which
              will go to /dev/null unless otherwise  redirected.   The  syslog
              redirection  occurs  immediately  at  the point that --daemon is
              parsed on the command line even though the  daemonization  point
              occurs  later.   If one of the --log options is present, it will
              supercede syslog redirection.

              The optional progname parameter [...]

Yol 4 : Bazen bütün betiği root olarak çalıştırmak mantıklıdır.

Kök olarak birden fazla eylem gerçekleştiren bir komut dosyanız varsa, kök olarak çalıştırılmayacak kadar makul bir şekilde çalıştırılabilecek önemli bir etkinliği yoktur ve komut dosyasını kök olmayan bir kullanıcı olarak çalıştırmaktan asla yararlı bir şey olmaz. komut dosyasının kullanıcısı muhtemelen sadece root olarak çalıştırılmalıdır.

Bu durumda, sudokomut dosyasındaki komutlardan kaldırmalısınız . Betik root olarak çalıştığında, buna gerek kalmaz sudo. (Kök kullanıcı kutu rağmen, varsayılan olarak, kendisini de dahil olmak üzere herhangi bir kullanıcı olarak herhangi bir komutu çalıştırmak sudove bunu yapmak için bir şifre gerekmez. So eğer bunu bir izin örneklerini sudodaha sonra Senaryoda muhtemelen hala iş.)

Eğer herhangi örneği varsa sudoaslında kökü daha (ile diğer bazı kullanıcı olarak komutları çalıştırmak için kullanılır komut ), sonra yine tutmalı bu örnekleri.-u user

Komut dosyasının tamamı kök olarak çalıştırılıyorsa, komutları arka planda çalıştırmanın tipik yollarının çoğu, ekleme &ve nohup(gerekirse bildiğiniz) kullanımı da dahil olmak üzere uygulanır . Bunun için, yine openvpnde --daemonseçeneği ile kullanmayı düşünmelisiniz .


Çok kapsamlı ve düşünceli bir cevap. Aferin.
gwideman

2

TL; DR Daemon modunda çalıştır:openvpn --config Windscribe-Japan.ovpn --daemon

Konfigürasyon (.ovpn) dosya adının openvpnkomuta iletilmesi, yalnızca başka seçenek belirtilmediğinde işe yarar. Eğer --daemonseçeneği belirtirsem, openvpn, dosya adını bir seçenek parametresi olarak ayrıştırmaya çalışır ve Seçenekler hatası atar : "Windscribe.ovpn" dosyasını bir --option parametresi olarak ayrıştırmaya çalışıyorum ancak '-' başlığını göremiyorum .

Cevap:

Bundan kaçınmak için, dosya adı --configseçeneği ile belirtilmelidir . Örneğin openvpn --config Windscribe.ovpn --daemon,. Ardından tail -f /var/log/syslog, daha fazla inceleme yapmak için sislogyu birlikte kullanın .

curl ifconfig.coVPN'nin bağlı olduğundan emin olmak için bu curl komutunun çıktısından önce ve sonra da kontrol edebilirsiniz .

Not: Bu, SSC oturumundan çıktıktan sonra bile arka planda çalışacak.


0

Sadece kopyalayabilirsiniz

/ etc / openvpn / dizinine .conf dosyası

Ardından, sizin için tüm canlandırıcı ve sudo'ları işlemek için 'service openvpn @ confName start' komutunu sorun.

Bakınız /unix//a/366680/198666

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.