명령을 실행하기 전에 SSH 터널(ssh -w)이 설정될 때까지 기다립니다.

명령을 실행하기 전에 SSH 터널(ssh -w)이 설정될 때까지 기다립니다.

SSH VPN 터널(-w 옵션)을 사용할 때 터널이 실제로 언제 시작되는지 알 수 있는 방법이 있나요? ssh -w를 실행한 다음 ifup[1]을 실행하여 터널을 자동으로 설정하는 스크립트에서 이것을 사용하고 싶습니다.

-f 옵션은 서버에 연결한 후 터널이 설정되기 전에 반환되므로 도움이 되지 않습니다. 몇 초 동안 자면 도움이 되지만 너무 진부하게 느껴집니다.

LocalCommand 옵션이 작동하는 것 같습니다. 예를 들면 다음과 같습니다.

ssh -w 0:1 "-oLocalCommand=ifup tun0" "-oPermitLocalCommand=yes" myserver.example.org true

그러나 매뉴얼 페이지에는 "명령이 동기식으로 실행되었으며 이를 생성한 ssh(1) 세션에 대한 액세스 권한이 없습니다."라고 나와 있습니다. 위의 호출이 제대로 작동하는지 아니면 LocalCommand가 실행된 후에 행운이 따른 것입니까? 터널이 건설됐나요?

더 중요한 것은 스크립트에서 ssh -w를 사용하는 표준 방법이 있습니까?

[1] 저는 Fedora를 사용하고 있으며 ifup이 작동합니다 /etc/sysconfig/network-scripts/ifcfg-tun0. /etc/sysconfig/network-scripts/route-tun0

답변1

따라서 여기에는 두 가지 질문이 있습니다. 1) 터널이 실제로 시작될 때까지 기다리는 방법 또는 터널이 실제로 시작되었음을 아는 방법입니다. 2) Fedora에서 SSH 터널을 구성하는 표준 방법이 있습니까?

1)에 관하여 : 개인적으로 나는 다음과 같은 것을 사용하고 싶습니다 :

timeout=2 # Wait for two seconds for a reply.
ip=192.168.0.1 # Use IP address assigned to tunnel endpoint.
while ! ping -W "$timeout" -c 1 "$ip" &>/dev/null; do
  echo "Waiting for tunnel to be up..."
  sleep 0.5
done
echo "Tunnel is up."

for시도 횟수가 구성된 루프를 사용하거나 -I tun0tun 장치를 강제로 사용하도록 ping 명령에 이와 같은 내용을 전달하면 더 고급 효과를 얻을 수 있습니다 .

내가 이 접근 방식을 선호하는 한 가지 이유는 터널 자체를 설정한다고 해서 반드시 통신이 발생한다는 것을 의미하지는 않는다는 것입니다. 패킷 손실, iptables 규칙, 라우팅 구성 오류 등이 있을 수 있습니다. 스크립트가 중단되면 스크립트가 종료되는지, 터널링이 필요한 모든 명령에는 시간 초과/재시도 정책이 있는지 주의 깊게 확인하겠습니다.

2) 관련: 모든 배포판에서 SSH 터널을 구성하기 위한 기본 메커니즘을 알지 못합니다. 그렇다고 그들이 존재하지 않는다는 의미는 아닙니다. 과거에 내가 사용했던자동 SSH.

관련 정보