Mam komputer za NATem, który wykonuje odwrotne połączenie SSH z moim Digitalocean VPC. Korzystam z tego odwróconego połączenia SSH z domu, aby zalogować się do mojego biurowego komputera (jestem do tego upoważniony) i kopiować pliki oraz robić inne ważne rzeczy.
Chociaż nie często, zauważyłem, że mój komputer biurowy uruchamia się ponownie (z powodu awarii zasilania itp.) I przerywa odwrócone połączenie SSH, które nawiązało z moim komputerem VPC. W takich przypadkach nie mogę połączyć się z komputera domowego z komputerem biurowym.
Uruchamiam następujący skrypt, aby połączenie odwrócone + dynamiczny serwer proxy w celu anonimizacji mojego ruchu (ponieważ nie muszę udostępniać informacji o przeglądaniu) generowanego na komputerze w biurze.
autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
Po ponownym uruchomieniu nie ma możliwości ponownego uruchomienia skryptu thsi na komputerze w biurze, ponieważ nie ma go fizycznie. Aby rozwiązać ten problem, zainstalowałem następujący crontab.
Uwaga: rev.sh
plik zawiera powyższą linię. Certyfikat „digitalOcean” i rev.sh znajduje się w Ubuntu home
. Dlatego po uruchomieniu ./rev.sh
w terminalu Ubuntu uzyskuję dynamiczny serwer proxy, a także dostęp do serwera ym DigitalOcean. Ta metoda działa w 100%.
Jednak gdy instaluję chrontab w następujący sposób, Mój komputer ubuntu nigdy nie tworzy dynamicznego serwera proxy. Widzę to, ponieważ gdy sprawdzam ten serwer proxy z Google Chrome, mówi, że serwer proxy odmawia połączenia.
Oto cronejobs, których próbowałem jako root cronejobs. Próbowałem również jako zwykły użytkownik, ale nadal nie działały.
@reboot bash /home/user/rev.sh
@reboot /home/user/rev.sh
@reboot cd /home/user && ./rev.sh
Następnie zainstalowałem chrontab na kilka minut przed bieżącą godziną i czekałem, aż się uruchomi.
24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh
te również się nie wykonały.
Proszę, bądź na tyle uprzejmy, aby pomóc mi dostrzec mój błąd. Na tej stronie internetowej jest wiele podobnych pytań dotyczących mojego problemu. Odniosłem się zatem do wielu odpowiedzi, ale żadna z nich nie pomogła.
źródło
/var/log/cron*
. Do celów testowych możesz po prostu napisać coś takiego*/2 * * * * /path/to/script
- uruchamia skrypt co 2 minuty. Sprawdź także maile dla użytkownika uruchamiającego crona. Czy to root? Użyjmail
polecenia. Och, widzę, że używasz klucza ssh? Wątpię, czy zadanie crona będzie w stanie je znaleźć, jeśli nie podasz pełnej ścieżki do niego po-i
zmianie.Odpowiedzi:
Nie jestem pewien, czy używanie
cron
skryptu przy uruchamianiu jest tak dobrym pomysłem. Alternatywą, którą uważam za bardziej odpowiednią, jest utworzenie usługi SystemD, jak opisano tutaj . Utwórz plik o nazwie/etc/systemd/system/autossh.service
:Następnie uruchom następującą komendę jako root:
źródło
Kilka rzeczy, które możesz wypróbować:
Czasami twoja ścieżka nie jest w pełni ustawiona w czasie uruchamiania lub przez cronjobs, więc zamień autossh na pełną ścieżkę, w moim systemie, który jest
Motyw @reboot zależy od czasu uruchomienia demona cron, dlatego można go wywołać, zanim inne podsystemy (sieć?) zaczną działać
I twój przykład crontab:
będzie wywoływał dopiero 8 każdego miesiąca. I ma dodatkowe pole. Próbować
źródło
/usr/bin
jest zawsze w ustawieniu domyślnymPATH
, nawet dlacron
Wygląda na to, że kiedy skrypt jest wykonywany przez crontab, nie może znaleźć twojego certyfikatu.
Kiedy użytkownik wykonuje skrypt, używa certyfikatu z /home/ubuntu-user/.ssh / ... Jednak gdy skrypt jest wykonywany z crontab, działa jako root. root pobiera certyfikaty z katalogu /root/.ssh
Masz wiele sposobów, aby to zadziałało, ale myślę, że uruchamianie skryptu tak jak robi to użytkownik ubuntu w crontab .
Edytować:
upewnij się, że podałeś pełną kwalifikowaną ścieżkę do certyfikatu
źródło
Spróbuj użyć
su
:Czy to pomoże w twoim problemie?
źródło
ponieważ pytanie nie zawiera tak wielu danych, zacznę od zera od tego, co bym zrobił
Umieściłbym wszystkie konfiguracje w / etc / ssh / ssh_config:
Włożyłbym klucz
/etc/ssh/mytunnel_key
wtedy spróbowałbym z wpisem cron (usługa upstart / systemd byłaby lepsza) w następujący sposób:
źródło
Musisz użyć -f i uruchomić polecenie, gdy uruchamiasz się bez terminala. Oto przykład:
-f umieszcza go w tle, ale umieszczenie go w tle oznacza, że ssh połączy się, a następnie rozłączy, gdy tylko zakończy swoje zadanie. Więc potrzebujesz zadania.
sleep 31536000 mówi ssh, aby uruchamiał „sleep” przez 1 rok po podłączeniu. W tym czasie twoje tunele pozostaną otwarte.
Jeśli nie uruchomisz polecenia, ssh połączy się, skonfiguruje tunel zwrotny na porcie 2205, a kiedy to zrobi, zakończy działanie. Używając autossh, jeśli połączenie się nie powiedzie, połączy się ponownie i ponownie uruchomi tryb uśpienia. Nawet przy naprawdę stabilnym połączeniu internetowym wątpię, czy rok jest możliwy.
BTW - w przeciwieństwie do innych żartowniców, wiem, że to działa, ponieważ faktycznie przetestowałem to, ponieważ oczywiście robię coś podobnego, a ponieważ mam teraz działającą, bardzo niezawodnie, mogę udzielić poprawnej odpowiedzi.
-f i „polecenie”
Tego brakuje.
źródło