스크립트에서 백그라운드에서 루트로 OpenVPN을 실행하려면 어떻게해야합니까?


22

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 연결을 시작하려면 Ctrl+ Z다음에 a를 입력하여 openvpn 프로세스를 백그라운드로 푸시해야 합니다 bg.

그러나 내 bash 파일 만 호출하여 openvpn 연결 단계와 ssh를 자동으로 호출하고 싶습니다. 이 파일에서 Ctrl+ Zbg단계 를 에뮬레이트하려면 어떻게해야 합니까?

나는를 추가하려고했습니다 &받는 openvpn명령과 배치 nohup그것의 앞에. 둘 다 작동하지 않습니다.


이런 종류의 질문은 여러 번 요청되었습니다. 도움이 필요하면 스크립트를 게시해야합니다.
Panther

sudo -b백그라운드에서 명령을 따르는 명령을 실행하는 데 사용
Nick Sillito

1
이것은 실제로 그 질문 의 복제본 이 아니며 , 백그라운드 프로그램을 루트로 실행하는 것을 거의 다루지 않으며 OpenVPN을 올바르게 데몬하는 방법을 다루지 않습니다.
Eliah Kagan

그런 다음 제목을 다시 변경하여 백그라운드 프로그램을 루트로 실행하려고했음을 나타냅니다.
null

@null 요청에 따라 제목을 다시 편집했습니다. OpenVPN을 종종 루트로 실행 하고, 그것의하지 않는 상황에서 --daemon옵션을 여전히 사용할 수 있지만 루트로 실행하는 방법에 대한 부분을 잘한다는 것 입니다 이 질문에 대한 중앙 및 제목에 반영되어야한다 . 이것을 지적 해 주셔서 감사합니다!
Eliah Kagan

답변:


35

TL; DR : 또는 더 나은 것을 사용하십시오 .sudo -bopenvpn [...] --daemon

실행중인 이후 openvpn(당신이 프로그램을 실행하고자하기 때문에, 덜 구체적으로, 그리고 루트로 백그라운드에서) 상황을 해결하지 않는 백그라운드에서 명령을 실행하는 방법에 대한 가장 일반적으로 분배 정보를 제공합니다. 당신은 말했다 :

cpenvpn 명령에 &를 추가하고 그 앞에 nohop을 배치하려고했습니다. 둘 다 작동하지 않습니다.

당신의 명령은 다음과 같습니다

sudo openvpn ~/my_connection.ovpn

아래 sudo는 최근에 비밀번호를 입력하지 않은 경우의 기본 구성 sudo(상호 작용 사용, 일반적으로이 수단 같은 터미널) 같은 맥락에서 다음 비밀번호를 요청합니다. 그러나 추가하여 백그라운드에서 명령을 실행하면 라인 &이 표시 되거나 입력 할 수있는 기회가 주어 지지 않습니다 .[sudo] password for user:

따라서이 상황에서 대화식 사용을 위해 명령을 실행하고 암호를 입력 한 후 백그라운드로 전송하는 것이 합리적인 방법 입니다.

그러나 이것이 유일한 방법은 아니며 스크립트에서 그렇게하고 싶지 않습니다 .

방법 1 :sudo 신선한 타임 스탬프가 있는지 확인하십시오 .

sudo먼저 다음을 실행하여 명령을 실행하는 데 사용될 때 현재 시간 소인이 있는지 확인할 수 있습니다 .

sudo -v

그런 다음 다음을 실행할 수 있습니다.

sudo openvpn ~/my_connection.ovpn &

그러나을 사용하여 백그라운드에서 명령을 실행하려는 경우 일반적으로 피하는 것이 좋습니다 &(및 nohup) sudo. 이것은 특히 스크립팅의 경우입니다.

방법 2 : 사용 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.

sudo가 암호를 수신 한 후 (필요한 경우) 명령을 실행할 수 있다고 판단 할 때까지 백그라운드에서 아무것도 실행되지 않기 때문에이 기능이 작동합니다 .

방법 3 : 그러나에 대해서는 openvpn아마도로 실행해야합니다 --daemon.

openvpn--daemon옵션 으로 실행하면 백그라운드에서 자동으로 실행됩니다 .

sudo openvpn ~/my_connection.ovpn --daemon

합격 --daemon하여 후 .opvn파일 이름보다는 전에; 다음의 인수 --daemon는있는 경우, 데몬 openvpn처리 된 프로세스가 사용해야 하는 이름으로 해석됩니다 . (수행 하지 APPEND도 &.)

이것이 적절한 지 아닌지는 상호 작용 openvpn이 실행 된 후 이지만 데몬을 초기화하기 전에 발생해야하는지 여부에 따라 다릅니다 . 그리고 그것은 부분적으로에 설정된 내용에 달려 있습니다 ~/my_connection.ovpn. 그러나 즉시 디먼을 실행할 수 없다면 openvpn백그라운드에서 즉시 실행하는 다른 모든 방법도 중단됩니다 .

따라서 백그라운드에서 실행 openvpn시작 하고 전경으로 다시 가져오고 싶지 않다는 것을 알고 있는 상황에서는 --daemon옵션을 사용하여 호출하는 방법을 고려해야합니다 . 이에 특정 openvpn지원하지 않는 --most 프로그램이 --daemon많은 서버 프로그램 일부 같은 옵션이있다하더라도, 옵션을 선택합니다. 그러나 이름과 구문은 다릅니다.

이 옵션을 사용 (당신이 그것을 사용하는 방법), 난 당신이 읽고 추천 여부를 결정하려면 매뉴얼 페이지를 특히 섹션에, . 유용한 정보가 많이 있으며 여기에 첫 번째 단락 만 인용합니다.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 [...]

방법 4 : 때로는 전체 스크립트를 루트로 실행하는 것이 합리적입니다.

루트로 여러 작업을 수행하는 스크립트가있는 경우 루트가 아닌 합리적으로 실행되는 중요한 활동이 없으며 루트가 아닌 사용자로 스크립트를 실행하면 아무런 도움이되지 않습니다. 스크립트 사용자는 루트로 실행해야합니다.

이 경우 sudo스크립트의 명령에서 제거해야합니다 . 스크립트가 루트로 실행될 때 필요가 없습니다 sudo. (루트 사용자 수 있지만, 기본적으로 자신을 포함하여 모든 사용자가 같은 명령을 실행 sudo하고 그렇게하기 위해 암호를 필요로하지 않는다. 그래서 당신이 경우에 의 휴가 인스턴스 sudo다음 스크립트는 것입니다 아마 여전히 일을.)

당신의 인스턴스가있는 경우 sudo실제로 루트가 아닌 (일부 다른 사용자로 명령을 실행하는 데 사용되는 스크립트를 ), 당신은 여전히 유지해야 하는 인스턴스를.-u user

전체 스크립트가 루트로 실행되는 경우 백그라운드에서 명령을 실행하는 일반적인 방법의 대부분은 추가 &및 필요한 경우 nohup(이미 알고 있음) 사용을 포함하여 적용됩니다 . 그러나이를 위해서는 여전히 옵션 openvpn과 함께 사용 하는 것이 --daemon좋습니다.


놀랍도록 포괄적이고 신중한 답변. 잘 했어.
gwideman

2

TL; DR 데몬 모드에서 실행하십시오.openvpn --config Windscribe-Japan.ovpn --daemon

구성 (.ovpn) 파일 이름을 openvpn명령에 전달하면 다른 옵션이 지정되지 않은 경우에만 작동합니다. --daemon옵션을 지정하면 openvpn은 파일 이름을 옵션 매개 변수로 구문 분석하려고 시도합니다. 옵션 오류를 발생시킵니다. "Windscribe.ovpn"을 --option 매개 변수로 구문 분석하려고하지만 앞의 '-'가 표시되지 않습니다 .

대답:

이를 피하려면 --config옵션 으로 파일 이름을 지정해야합니다 . 예를 들어openvpn --config Windscribe.ovpn --daemon . 그런 다음 tail -f /var/log/syslog추가 검사를 위해 syslog에 꼬리를 붙입니다 .

이 curl 명령의 출력 전후를 확인할 수도 있습니다 curl ifconfig.co 에 VPN이 연결되어 있는지 확인할 수도 있습니다.

참고 : SSH 세션에서 로그 아웃 한 후에도 데몬이 계속 실행됩니다.


0

당신은 그냥 복사 할 수 있습니다

.conf 파일을 / etc / openvpn /에

그런 다음 'service openvpn @ confName start'에 모든 데몬 화 및 sudo를 처리하도록 요청하십시오.

참조 /unix//a/366680/198666를

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.