Muszę podpiąć się do wyjścia aktualnie działającego terminala (tty1) z terminala wirtualnego i przechwycić go (działający serwer X).
Muszę podpiąć się do wyjścia aktualnie działającego terminala (tty1) z terminala wirtualnego i przechwycić go (działający serwer X).
Odpowiedzi:
Natknąłem się na to jedno narzędzie o nazwie ttylog
. Jest to program Perl dostępny w CPAN tutaj . Ma kilka ostrzeżeń, jednym z nich jest to, że mogłem tylko wymyślić, jak podłączyć do terminala, który został stworzony jako część kogoś, kto wpada do mojego pudełka. Z drugiej strony musisz uruchomić go z podwyższonymi uprawnieniami (tj. Root lub sudo).
Ale to działa!
Najpierw ssh do twojego pudełka w TERMINIE 1:
TERM#1% ssh saml@grinchy
Zwróć uwagę na tty tego nowego terminala:
TERM#1% tty
/dev/pts/3
Teraz w innym terminalu (TERM # 2) uruchom następującą komendę:
TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]
Teraz wróć do TERMINU 1 i napisz coś, pojawi się w TERMINIE 2.
Wszystkie polecenia, których próbowałem (top, ls itp.) Działały bez żadnych incydentów ttylog
.
gdb
była pierwsza opcja, z którą się zetknąłem. W przeszłości korzystałem z niej sam, ale dla mnie jest to hacking. Cieszę się, że to pomogło!
Rzeczywiście jest. Urządzenia / dev / vcs * i / dev / vcsa * odpowiadają urządzeniom / dev / tty * (wirtualnym terminalom). F1 = tty1 = vcs1 / vcsa1 i tak dalej. Vcs / vcsa jest jak tty dla „bieżącego” terminala wirtualnego.
Jako root możesz po prostu przechwycić te urządzenia (np. Cat / dev / vcs2) i zobaczyć, co jest na odpowiednim VT (np. / Dev / tty2 on na F2), na przykład zrobić migawkę. vcsa * różni się od vcs * tym, że zawierają informacje o wymiarach terminala (ekranu). Pamiętaj, że jest to tylko migawka postaci wyświetlanych na ekranie - zebranych z pamięci przydzielonej do terminala - więc nie oczekuj ładnego, łatwego do przeanalizowania wyniku.
Wadą jest to, że jeśli informacje migają zbyt szybko, może to być trudne do uchwycenia. Być może tail -f / dev / vcs1 zadziała, jeśli musisz wykonać kilka screenów (sam nie próbowałem)? Najłatwiej jest po prostu przekierować go najpierw do pliku. Dobrym pomysłem może być również użycie VT (F1-F6), aby na niego spojrzeć, ponieważ zaciski będą miały takie same wymiary. Z mojego doświadczenia wynika, że najlepiej używać urządzeń vcs * - nie vcsa * -.
Jeśli to nie zadziała, być może jeden z pakietów „big Brotherish”, który pozwala administratorowi obserwować aktywność na terminalu, może działać.
PS: Zapomniałem zapytać, jakiego systemu operacyjnego używasz. Dotyczy to Linuksa, chociaż podobne urządzenia prawdopodobnie istnieją również w innych systemach operacyjnych. Spróbuj wyszukać „wirtualną pamięć konsoli” wśród stron podręcznika dla urządzeń.
wlan0
, faktycznie mam sytuację catch-22, która próbuje debugować, gdzie ten skrypt nie działa. Załóżmy, że nie mogę użyć koncentratora USB ... Czy jest jakiś sposób na przeniesienie znaków do / dev / tty1?
/dev/tty1
roota, ale wszystko to wyświetla znaki na ekranie, nie wpisując ich
Użyj tty
polecenia w każdym terminalu, aby je zidentyfikować:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Zakładając te TTY, aby przekierować stdout pierwszego na drugi, uruchom to w pierwszym terminalu:
exec 1>/dev/pts/1
Uwaga: Teraz każde wyjście komendy będzie wyświetlane na pts / 1
Aby przywrócić domyślne zachowanie standardowego punktu pts / 0:
exec 1>/dev/pts/0
Obejrzyj ten film, aby zobaczyć demonstrację.
To działało dla mnie:
Używając klawiatury na komputerze „A” (tj. Fizycznym komputerze, który ma być kontrolowany), uruchom: screen -q
Połącz się ssh
z komputerem „B” do komputera „A”.
W sesji ssh wpisz:, screen -ls
aby uzyskać identyfikator sesji, z którym chcesz się połączyć (4 cyfry w wierszu zawierającym tty ).
Połącz się z powyższą sesją za pomocą: screen -x <session id>
... używając numeru identyfikacyjnego sesji otrzymanego z screen -ls
powyższego polecenia.
Wszystko wpisane w jednej z „sesji” będzie miało miejsce w obu „sesjach”, więc na przykład pisanie screen -d
spowoduje wyjście z OBU sesji.
Innym podejściem jest użycie screen
narzędzia gnu na komputerze lokalnym. Wywołaj go z -L
opcją lub zacznij bez tej opcji i użyj ^aH
sekwencji poleceń. Każde z tych podejść powoduje, że wszystkie dane wejściowe i wyjściowe są rejestrowane w pliku o nazwie, screenlog.x
gdzie x to numer ekranowy.
Jest to przydatne, ponieważ na komputerze zdalnym nie trzeba instalować żadnych dodatkowych elementów.
Ponieważ nie uruchomiłem tty1 z ekranem, ten skrypt pomógł:
Użyłem odpowiedzi Baarda Kopperuda powyżej. „128” to 1 linia mojego tty1. Uśpienie można ustawić na odpowiednią liczbę.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Użyłem tego w terminatorze i tak dopasowałem kolumnę, aby przewiń był jednym wierszem tekstu.
Otwórz dwa terminale. Wpisz tty
każdy, a dostaniesz jego identyfikator jako/dev/pts/nº
Następnie w pierwszym wpisujesz, script -f /dev/pts/nºofSecondTerminal
a w drugim robisz odwrotnie, script -f /dev/pts/nºofFirstTerminal
aby się połączyć
Gratulacje! Oba terminale wysyłają i odbierają te same rzeczy. Potrzebujesz trzeciej? Studiowałeś kombinacje? Będziesz potrzebował 6 script -f
poleceń. Jeszcze więcej tty? Wkrótce...
screen
lubtmux
przed uruchomieniem polecenia, do którego dostęp można uzyskać z innego terminala .