Mam dwie maszyny, klienta i serwer.
Klient (który stoi za firmową zaporą ogniową) otwiera tunel zwrotny SSH do serwera, który ma publicznie dostępny adres IP, za pomocą tego polecenia:
ssh -nNT -R0: localhost: 2222 insecure@server.example.com
W OpenSSH 5.3+ 0
występowanie tuż po -R
oznacza „wybierz dostępny port”, a nie jawnie go wzywając. Powodem tego jest to, że nie chcę wybierać używanego portu. W rzeczywistości istnieje wielu Klientów, którzy muszą założyć podobne tunele.
Problem polega na tym, że serwer nie wie, który klient jest który. Jeśli chcemy ponownie połączyć się z jednym z tych klientów (za pośrednictwem hosta lokalnego), to skąd wiemy, który port odnosi się do którego klienta?
Wiem, że ssh zgłasza numer portu w wierszu poleceń, gdy jest używany w powyższy sposób. Jednak chciałbym również użyć autossh, aby utrzymać sesje przy życiu. autossh uruchamia proces potomny prawdopodobnie przez fork / exec, tak że dane wyjściowe rzeczywistego polecenia ssh są tracone w eterze.
Ponadto nie mogę wymyślić żadnego innego sposobu uzyskania zdalnego portu od klienta. Zastanawiam się więc, czy istnieje sposób na określenie tego portu na serwerze.
Jednym z moich pomysłów jest użycie / etc / sshrc, który jest podobno skryptem uruchamianym dla każdego połączenia. Jednak nie wiem, w jaki sposób można uzyskać tutaj istotne informacje (być może PID konkretnego procesu sshd obsługującego to połączenie?) Chciałbym kilka wskazówek.
Dzięki!