最初にopenvpn
を呼び出し、次にssh
を呼び出すスクリプトを作成したいと思います。コマンドを入力するとき
Sudo openvpn ~/my_connection.ovpn
コマンドプロンプトで次の出力を取得します:
...
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
このコマンドはブロックされており、シェルはリリースされていません。後でssh接続を開始するには、次のように入力してopenvpnプロセスをバックグラウンドにプッシュする必要があります。 Ctrl+Z bg
が続きます。
ただし、bashファイルだけを呼び出すことにより、openvpn接続ステップとsshを自動的に呼び出したいと思います。どのようにエミュレートするのですか Ctrl+Z このファイル内のbg
ステップ?
&
をopenvpn
コマンドに追加し、その前にNohup
を配置しようとしました。どちらも動作しません。
TL; DR:Sudo -b
を使用するか、openvpn [...] --daemon
.を使用する
openvpn
を実行しているため(そして、それほど具体的ではなく、プログラムas rootをバックグラウンドで実行するため)、バックグラウンドでコマンドを実行する方法に関する最も一般的な情報はありませんあなたの状況に対処してください。あなたが言った:
Cpenvpnコマンドに&を追加し、その前にnohopを配置しようとしました。両方とも機能しません。
あなたのコマンドは:
Sudo openvpn ~/my_connection.ovpn
Sudo
のデフォルト設定では、同じコンテキストでSudo
のパスワードを最近入力していない場合(インタラクティブな使用、通常これは同じ端末を意味します)、パスワードを要求します。ただし、&
を追加してコマンドをバックグラウンドで実行すると、[Sudo] password for user:
行が表示されず、入力する機会も与えられません。
そのため、この状況では、コマンドを実行し、パスワードを入力し、その後パスワードをバックグラウンドに送信するのが合理的な方法です。forInteractive use。
しかし、それが唯一の方法ではなく、あなたが言うように、あなたはそれをin scriptにしたくないでしょう。
Sudo
に新しいタイムスタンプがあることを確認します。最初に実行することにより、Sudo
がコマンドの実行に使用されるときに現在のタイムスタンプを持つことを確認できます。
Sudo -v
次に、その後、次を実行できます。
Sudo openvpn ~/my_connection.ovpn &
ただし、Nohup
を使用してバックグラウンドでコマンドを実行する場合は、通常&
(およびSudo
)を完全に回避することをお勧めします。これは特にスクリプトの場合です。
Sudo -b
を使用します。一般に、これは通常あなたが望むものです。代わりに、Sudo
自体をフォアグラウンドで実行できますが、-b
フラグを渡すと、Sudo
によってコマンドがバックグラウンドで実行されます。
Sudo -b openvpn ~/my_connection.ovpn
これは通常、特にコマンドをスクリプトに配置する場合に適した方法です。 Sudo -b
を使用すると、 ジョブ制御 を取得できませんが、 シェルスクリプトでは、ジョブ制御はデフォルトで無効になっているため、通常は使用しないでください 。
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.
これは、afterがパスワードを受け取り(必要な場合)、コマンドの実行が許可されていると判断されるまで、バックグラウンドで何も実行されないためです。
openvpn
の場合は、おそらく--daemon
で実行する必要があります。--daemon
オプションを指定して実行すると、openvpn
はバックグラウンドで自動的に実行されます。
Sudo openvpn ~/my_connection.ovpn --daemon
--daemon
を前ではなく.opvn
ファイル名の後に渡します。 --daemon
に続く引数は、もしあれば、デーモン化されたopenvpn
プロセスが使用すべき名前として解釈されます。 (notも&
を追加します。)
これが適切かどうかは、openvpn
が実行された後、デーモン化される前に相互作用が発生するかどうかによって決まります。そしてthatは、部分的に~/my_connection.ovpn
で設定されているものに依存します。しかし、openvpn
がすぐにデーモン化できなかった場合、バックグラウンドですぐに実行する他のすべての方法も壊れます。
したがって、openvpn
をバックグラウンドでstartに実行する必要があり、フォアグラウンドに戻す必要がないことがわかっている状況では、次の方法を強く検討する必要があります。 --daemon
オプションを使用して呼び出します。これはopenvpn
に固有です。ほとんどのプログラムは--daemon
オプションをサポートしていませんが、多くのサーバープログラムにはそのようなオプションがあります。 (ただし、名前と構文は異なります。)
このオプションを使用するかどうか(および使用方法)を決定するには、特に--daemon
のセクションで openvpn
マニュアルページ を読むことをお勧めします。これには多くの有用な情報があり、ここでは最初の段落のみを引用しています。
--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 [...]
Rootとして複数のアクションを実行するスクリプトがある場合、rootとしてnotで合理的に実行される重要なアクティビティはなく、スクリプトの実行から得られるものは決してありません非rootユーザーとして、スクリプトのユーザーはおそらく単にrootとして実行する必要があります。
この場合、スクリプトのコマンドからSudo
を削除する必要があります。スクリプトがルートとして実行される場合、Sudo
は必要ありません。 (デフォルトでは、rootユーザーはSudo
を持つ自分自身を含むすべてのユーザーとしてコマンドを実行できますが、そうするためにパスワードは必要ありません。したがって、doにSudo
のインスタンスを残す場合スクリプトを実行すると、おそらく引き続き動作します。)
スクリプトにSudo
のインスタンスがあり、ルート(-u user
を使用)以外のユーザーとしてコマンドを実行するために実際に使用されている場合、thoseインスタンスを保持する必要があります。
スクリプト全体をルートとして実行する場合、ほとんどの バックグラウンドでコマンドを実行する一般的な方法 が適用されます。これには、&
の追加、および必要に応じてNohup
の使用が含まれます)。ただし、このためには、--daemon
オプションでopenvpn
を使用することを引き続き検討する必要があります。
TL; DRデーモンモードで実行:openvpn --config Windscribe-Japan.ovpn --daemon
構成(.ovpn)ファイル名をopenvpn
コマンドに渡すことは、他のオプションが指定されていない場合にのみ機能します。 --daemon
オプションを指定すると、openvpnはオプションパラメーターとしてファイル名を解析しようとし、オプションエラー:「-Windscribe.ovpn」を--optionパラメーターとして解析しようとしていますが、そうしません」 t先行する「-」を参照してください。
回答:
これを回避するには、--config
オプションでファイル名を指定する必要があります。たとえば、openvpn --config Windscribe.ovpn --daemon
。次に、さらに検査するために、tail -f /var/log/syslog
でsyslogを末尾にします。
このcurlコマンドcurl ifconfig.co
の出力の前後をチェックして、VPNが接続されていることを確認することもできます。
注:これにより、SSHセッションからログアウトした後でもデーモンが実行され続けます。
あなただけをコピーすることができます
.confファイルを/ etc/openvpn /に
次に、「service openvpn @ confName start」に依頼して、すべてのデーモン化とSudoを処理します。