Odpowiedzi:
Jest to bardzo proste dzięki wystarczającej liczbie najnowszych wersji OpenSSH, jeśli planujesz z wyprzedzeniem.
Otwórz połączenie główne za pierwszym razem. W przypadku kolejnych połączeń trasuj połączenia podrzędne przez istniejące połączenie główne. W swoim ~/.ssh/config
ustaw, aby udostępnianie połączenia odbywało się automatycznie:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Jeśli rozpoczniesz sesję ssh do tego samego (użytkownika, portu, komputera) co istniejące połączenie, druga sesja zostanie tunelowana w pierwszej. Nawiązanie drugiego połączenia nie wymaga nowego uwierzytelnienia i jest bardzo szybkie.
/var/log/secure
i /var/log/auth.log
zaloguj połączenia SSH; połączenie podrzędne nie pojawia się tam, ponieważ łączy się z istniejącym połączeniem. Jeśli twoja sesja ssh przydzieli terminal (tj. ssh somehost
Bez dostarczonej komendy, lub ssh -t
), to jest (normalnie) zalogowany wtmp
, niezależnie od tego, jak ten terminal się pojawił (sshd niezależnie od metody użytej do nawiązania połączenia, aplikacja emulatora terminala,…).
ControlPersist 600
opóźnienia w sekundach, gdy gniazdo jest w stanie bezczynności, zanim zostanie automatycznie usunięte. W przeciwnym razie nastąpi automatyczne zamknięcie po zakończeniu połączenia głównego. To nie jest dobre do zdalnego wykonywania szeregu poleceń (np.
-S
(określ gniazdo) i -M
(utwórz połączenie główne) klienta SSH.
Jest to dość łatwe do osiągnięcia przy użyciu narzędzia NC i tuneli ssh.
W sesji ssh wpisz ~Cnowy wiersz. Otrzymasz monit ssh „konsola serwisowa”, który wygląda następująco:
ssh>
Wpisz polecenie lokalnego przekazywania, aby otworzyć tunel ssh:
ssh> -L22000:targethost:22001
Forwarding port.
Gdzie targethost
jest nazwa hosta lub adres IP urządzenia, z którym jesteś podłączony.
Teraz, zakładając, że serwer ssh na maszynie docelowej nie został skonfigurowany do zakazania tuneli, masz pożądane przekierowanie połączenia: ssh
klient na twoim komputerze nasłuchuje na porcie 22000 i przekieruje wszelki ruch wysłany do niego do portu 22001 na targethost
.
Jest to tak proste, jak wprowadzenie do już otwartej sesji ssh następującego polecenia:
remote$ nc -l localhost 22001 | sh
Spowoduje to uruchomienie serwera TCP nasłuchującego na porcie 22001 - który jest portem docelowym naszego tunelu ssh - i przekieruje otrzymane dane (prawdopodobnie polecenia powłoki) do targethost
instancji powłoki.
local$ cat yourscript.sh | nc localhost 22000
Spowoduje to wysłanie ciała skryptu do tunelu ssh i zakończy się jego wykonaniem w powłoce na targethost
. Zobaczysz wyjście skryptu w swoim terminalu z sesją ssh.
Zwrócę też uwagę, że tunel ssh (krok 1.) w tym scenariuszu nie jest ściśle wymagany; równie dobrze możesz uruchomić serwer otwarty i połączyć się z nim bezpośrednio przez Internet. Musisz jednak skorzystać z tunelu, jeśli docelowy host nie może być osiągnięty bezpośrednio (np. Jest za NAT) lub wymagane jest szyfrowanie ssh.
~
postać musi przyjść po nowej linii, więc LF ~ C
prawdopodobnie jest to lepsza sekwencja.
less
, że zwykły domyślny pager obsługuje wyszukiwanie, które pozwala zaoszczędzić przewijanie, jeśli znasz słowa kluczowe: po prostu wpisz man ssh
/ESCAPE
i już tam jesteś.