bash 스크립트 openvpn, 출력 대기, ssh 서버, openvpn 종료

bash 스크립트 openvpn, 출력 대기, ssh 서버, openvpn 종료

bash 스크립트를 사용하여 openvpn 연결을 시작하고 터널이 설정되면 서버에 대한 SSH 터미널 연결을 시작하고 SSH 연결을 닫으면 openvpn 연결도 닫습니다.

처음에는 제안된 솔루션을 구현해 보았습니다.https://stackoverflow.com/questions/21001220/bash-sequence-wait-for-output-then-start-next-program쉘 스크립트로

#!/bin/bash
exec 3< <(sudo openvpn --config  /etc/openvpn/server.ovpn)
sed '/Initialization Sequence Completed$/q' <&3 ; cat <&3 &
ssh server

저는 이 스크립트를 fish 셸에서 sh ssh-vpn.sh로 실행합니다.

스크립트로 보면 구문 오류가 발생합니다 line 2: syntax error near unexpected token '<'. 스크립트 외부에서는 이 오류가 발생하지 않습니다.

또한 이 명령을 스크립트로 사용하지 않고, 파일 디스크립터 3이 이미 존재하기 때문에 가끔 오류 메시지가 나타나는 것 같았습니다.

  1. 스크립트에서 구문 오류를 방지하는 방법은 무엇입니까?

  2. 나중에 openvpn 연결을 자동으로 닫도록 스크립트를 확장하는 방법은 무엇입니까?

  3. 스크립트가 끝날 때 파일 설명자가 닫히도록 하는 방법은 무엇입니까?

하나의 질문에 너무 많은 질문이었다면 사과드립니다. 이것은 오랫동안 제가 처음으로 작성한 스크립팅 질문 중 하나이고 아직 여기서 많은 것을 배워야 할 것 같습니다.

답변1

문제는 코드가 셸용으로 작성되었지만 이를 실행하기 위해 bash명시적으로 사용하고 있다는 것입니다 . sh점점 더 많은 플랫폼에서 이들은 동일하지 않습니다.

대신 sh ssh-vpn.sh두 가지 더 나은 옵션이 있습니다.

  1. 스크립트를 실행 가능하게 만들고 해당 #!줄에서 사용할 셸을 정의하게 합니다.

    # just once
    chmod a+rx ssh-vpn.sh
    
    # thereafter
    ./ssh-vpn.sh
    
  2. 올바른 쉘을 사용하여 스크립트를 실행하십시오.

    bash ssh-vpn.sh
    

답변2

구현https://unix.stackexchange.com/users/100397/roaimapkill -9 -x $process_name님의 대답과 내가 단 하나의 openvpn 연결만 열려 있다는 것을 알면 다음의 명령을 재사용할 수 있습니다.bash 스크립트로 생성된 프로세스를 종료하는 가장 좋은 방법은 무엇입니까?- 그러면 이 코드가 나오네요

#!/bin/bash
exec 3< <(sudo openvpn --config  /etc/openvpn/server.ovpn)
sed '/Initialization Sequence Completed$/q' <&3 ; cat <&3 &
ssh server
sudo pkill -9 -x openvpn 

그래서 종합하면

  1. 위 코드를 사용하여 ssh-vpn.sh 스크립트를 생성합니다( printf무슨 일이 일어나고 있는지에 대한 일부 정보 추가).

    #!/bin/bash
    printf "Script to initialise openvpn connection to XYZ and open ssh channel into XYZ Server.\n"
    printf "Starting openvpn to YXZ...\n\n"
    exec 3< <(sudo openvpn --config  /etc/openvpn/server.ovpn)
    sed '/Initialization Sequence Completed$/q' <&3 ; cat <&3 &
    printf "VPN now initialised.\nstarting ssh connection to XYZ...\n"
    ssh server
    printf "\nKilling openvpn connection...\n"
    sudo pkill -9 -x openvpn 
    # end of script
    
  2. 껍질에

    # just once
    chmod a+rx ssh-vpn.sh
    
  3. 쉘에서 명령 실행

    # thereafter
    ./ssh-vpn.sh
    

관련 정보