Powiedzmy, że podłączyłem się do zdalnego komputera za pośrednictwem SSH. Z programu na tym komputerze zdalnym muszę wykonać polecenie na moim komputerze lokalnym (inicjatorze połączenia).
Co nasuwa pytanie: czy możliwe jest przejście do istniejącego połączenia między dwoma komputerami w celu uruchomienia polecenia na komputerze lokalnym?
Rozważałem uruchomienie polecenia ssh user@host-of-connecting-party <command>
na komputerze zdalnym, aby nawiązać odwrócone połączenie. Jest to jednak trudniejsze do zautomatyzowania i wymaga interwencji użytkownika. Miałem nadzieję, że uda mi się to w pełni zautomatyzować lub przynajmniej wykryć nazwę użytkownika / hosta podłączonego użytkownika.
ssh
remote-access
Aeyoun
źródło
źródło
Odpowiedzi:
Czasami mam podobną potrzebę, o ile łączę się przez Putty z naszym serwerem VPN, a stamtąd przez ssh do innego hosta, który nie jest dla mnie dostępny bezpośrednio z powodu konfiguracji VPN.
Czasami muszę po prostu szybko sprawdzić coś na maszynie serwera VPN, jednocześnie mając uruchomioną moją „sesję ssh”. Jednym z podejść jest uruchomienie sesji ssh
screen
, która, jak zauważyłem, dodaje pewne opóźnienie w porównaniu z „zwykłym ssh”. Innym podejściem, którym chciałbym się tutaj podzielić, jest:Podczas sesji SSH naciśnij Enter, następnie ~, (upewnij się, że nie jest wyświetlany, tzn. Jesteś w trybie poleceń), a następnie Ctrl- Z. Spowoduje to umieszczenie procesu klienta ssh na „hoście” w tle, a otrzymasz coś w rodzaju:
Teraz jesteś na „hoście”, możesz robić, co chcesz (chociaż nie jestem pewien, jak długo utrzyma się sesja ssh), a następnie powrócić do sesji SSH, uruchamiając
fg
.Przynajmniej działa to dla mnie, gdy jestem podłączony ze stacji roboczej Win10 za pośrednictwem Putty na maszynie Wirtualnej opartej na CentOS, a ta maszyna wirtualna łączy się przez SSH z innym hostem.
Mam nadzieję, że to komuś pomaga!
źródło
PermitLocalCommand yes
w twojej.ssh/config
dla gospodarza, można również zrobić<Enter>~C
, wtedy!<command>
.@ 62mkv odpowiedź jest znacznie lepszym rozwiązaniem. Użyć tego.
Dla kompletności i ciekawości, jeśli masz serwer ssh uruchomiony na komputerze lokalnym, możesz utworzyć tunel ssh, aby umożliwić połączenia ssh ze zdalnego hosta na porcie 20202 z powrotem do lokalnego na porcie 22. Przykład polecenia:
To uruchomi połączenie ssh, ale także skonfiguruje tunel z powrotem do serwera ssh działającego na twoim komputerze. Następnie możesz to zrobić, gdy ssh'ed na zdalnym hoście:
Oczywiście może to szybko stać się mylące - szczególnie jeśli technika jest zagnieżdżona więcej niż raz. Dodaje to również trochę opóźnienia - ponieważ wszystko, co wykonujesz na komputerze lokalnym, jest odbijane przez zdalny host.
Dodatkowe informacje na temat tunelowania ssh dla tych, których ciekawość nie została jeszcze zaspokojona, można znaleźć w odpowiedzi na to pytanie dotyczące wymiany stosów unixów .
źródło
Jeśli zarówno komputer lokalny, jak i zdalny są dostępne z Internetu, możesz po prostu otworzyć sesję SSH z komputera lokalnego na komputerze zdalnym, a następnie w tej sesji otworzyć kolejną sesję ssh z komputera zdalnego na komputerze lokalnym:
Aby zautomatyzować rzeczy, zobacz Fabric (wymagana znajomość języka Python)
źródło
Możesz użyć sshpass, aby połączyć się ze zdalnym komputerem i uruchomić polecenia.
Użyj prostego skryptu powłoki na komputerze lokalnym i użyj powyższego kodu, gdy chcesz uruchamiać polecenia na komputerze zdalnym. Jest to jeden ze sposobów, w jaki ogólnie stosuję się w automatyce.
źródło
Nie, nie możesz włamać się do istniejącej sesji.
Twoja aplikacja będzie potrzebowała sposobu ponownego połączenia z klientem. SSH będzie działać, jeśli klient ma uruchomiony serwer SSH, a serwer może osiągnąć port 22 na kliencie. Automatyzacja nie byłaby trudna, gdybyś używał uwierzytelniania opartego na kluczach zamiast uwierzytelniania hasłem - w ten sposób interwencja użytkownika nie byłaby konieczna.
Informacje na temat konfigurowania uwierzytelniania opartego na kluczach można znaleźć tutaj: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/
źródło
Jeśli masz dostęp do innego terminala, możesz wysłać SIGSTOP za pomocą polecenia „kill -19 PID” do komendy ssh, która zainicjowała połączenie. Następnie przejmiesz kontrolę nad terminalem na terminalu na komputerze klienta. Po zakończeniu możesz przywrócić połączenie ssh, po prostu wpisując fg, aby obudzić klienta ssh.
Ale oczywiście pytanie brzmi: jeśli masz już terminal na komputerze klienta, dlaczego miałbyś to zrobić :)
źródło