Dzwonię do ssh (OpenSSH) z OSX / Linux-C ++ - aplikacji przez fork / exec, aby utworzyć dynamiczne przekierowanie portów. Robi się to za pomocą trybu wsadowego (-o BatchMode = yes) i klucza prywatnego, który jest dostarczany do ssh (-i Option). Samo wywołanie SSH nie otwiera powłoki (opcja -N).
To jest mój pełny SSH-Call:
ssh -N -D 9000 -o BatchMode=yes -i /path/to/private-key user@host
Chciałbym kontynuować moją aplikację tak szybko, jak to możliwe, i muszę się dowiedzieć, czy ssh udało się utworzyć kanał. Sam SSH powraca tylko wtedy, gdy ma problem.
Czy istnieje możliwość wykrycia udanego przekierowania portów?
Oczywiście mogę poczekać, aż port zostanie otwarty przez SSH, ale szukam bardziej eleganckiego rozwiązania. Innym rozwiązaniem jest sprawdzenie Logu SSH (-v) czekającego na „Wprowadzanie interaktywnej sesji”, ale brzmi to dla mnie mało przenośnie.
Myślę, że znalazłem inne (także hackish) rozwiązanie. Podczas uruchamiania SSH z
stworzy gniazdo domeny kontrolnej tylko wtedy, gdy pomyślnie ustanowi połączenie. Musiałbym więc poczekać, aż gniazdo domeny pojawi się w systemie plików. Nadal nie jest piękny, ale brzmi to bardziej solidnie niż oczekiwanie na pojawienie się gniazda sieciowego.
Co ciekawe, można to również wykorzystać do znalezienia PID Mistrza (patrz Odpowiedź R). Za pomocą
źródło